Есть ли способ автоматически добавить к переменной $: в 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.