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

Требовать драгоценный камень в скрипте Ruby не удается во время загрузки

Я загружаюсь с помощью машины с помощью 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"

на старте.