Назад | Перейти на главную страницу

Как лучше всего автоматически работать с несколькими локациями site_ruby?

Есть ли способ автоматически добавить к переменной $: в ruby ​​для учета дополнительных местоположений site_ruby?

Ruby установлен в / usr / local /, и использование gem_install правильно установит новые файлы ruby ​​в / usr / local / lib / ruby ​​/ site_ruby.

Однако есть некоторые RPM для привязки рубина к таким инструментам, как shadow, которые мы хотели бы установить, и они устанавливаются в / usr / lib / ruby ​​/ site_ruby (не локально). Есть ли стандартный способ сообщить Ruby, что этот каталог также должен быть включен по умолчанию?

Я знаю, что скрипты могут динамически обновлять $: или их можно вызывать с помощью -I, но похоже, что это то, что нужно обработать при установке.

Кто-нибудь еще нашел способ решить эту проблему?

спасибо чак

Установите RUBYLIB в / etc / profile, чтобы включить нужные пути.

Какой-то хитрый пример кода:

#!/usr/bin/ruby -w

path_array = ARGV.dup
$:.each {|path| path_array << path }
path_string = "RUBYLIB=#{path_array.join(":")}"

begin
  File.open("/etc/profile", "a") {|f| f.puts(path_string)}
rescue => e
  puts "error writing file: #{e}"
  exit 1
end

Вы можете добавить этот скрипт в свой путь и просто вызвать

$ add_ruby_path "<path1>" "<path2>" "<path3>"

Хотя сам по себе не очень автоматический ...

Возможно, вы могли бы создать файл с именем / etc / rubypaths и запустить сценарий из cron с небольшими изменениями? Поэтому вместо того, чтобы полагаться на ARGV, вы делаете следующее:

path_array = []
path_array = IO.read("/etc/rubypaths").split("\n")
...

Но, возможно, вы хотите, чтобы ОС каким-то образом «знала», что в файловой системе есть еще одна папка site_ruby, и вы хотите добавить его в $ RUBYLIB. Не уверен, что это возможно без фактического сообщения ОС о своем намерении через что-то вроде файла в / etc.