Я загружаюсь с помощью машины с помощью chef. Мне он нужен для установки сценария init.d, который он выполняет, и когда сценарий вызывается в конце запуска chef, сценарий не работает в строке require 'daemons' (показано ниже). У меня есть распечатка до и после требования, а также печать до того, как требование зарегистрировано.
# my_invoked_script.rb
$stdout.reopen("output.txt")
$stderr.reopen("err.txt")
pid = fork
if pid.nil?
puts "Before"
require 'daemons'
puts "After"
...
else
Process.detach(pid)
end
Перед печатью регистрируется. После печати нет. Я думаю, поскольку это происходит во время загрузки, некоторые переменные env могут быть установлены неправильно. Кто-нибудь мог запускать скрипты ruby с требованием во время загрузки?
Мой сценарий init.d - это стандартный сценарий со следующей функцией запуска:
start(){
/usr/local/bin/ruby /home/ubuntu/my_invoked_script.rb
}
Вход в терминал и запуск скрипта не показывают ошибок, и все идет нормально.
Ruby 1.9.2 ubuntu 11.04, хотя я не уверен, что здесь проблема ни в одном из них.
Это могут быть переменные среды или файловая система с модулями, которая не монтируется во время выполнения сценария.
Вы можете попробовать запустить с ruby -w, чтобы получить больше информации, или вы можете установить переменную окружения RUBYLIBS перед запуском скрипта ruby, например
export RUBYLIB="/path/to/lib/ruby"
на старте.