我正在使用 chef 启动一台机器。我需要它安装一个 init.d 脚本,它确实安装了,当在 chef 运行结束时调用该脚本时,脚本在 require 'daemons' 行上失败(如下所示)。我在 require 之前和之后都有打印,并且记录了 require 之前的打印。
# 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
之前的打印已记录。之后的打印未记录。我想,因为这是在启动时,某些环境变量可能未正确设置。有人能够在启动时运行带有 require 的 ruby 脚本吗?
我的init.d脚本是一个具有启动功能的标准脚本,如下所示:
start(){
/usr/local/bin/ruby /home/ubuntu/my_invoked_script.rb
}
登录终端并运行脚本没有显示任何错误并且一切正常。
Ruby 1.9.2 ubuntu 11.04 虽然我不确定它们是否是这里的问题。
答案1
这可能是环境变量,也可能是在运行脚本时未安装包含模块的文件系统。
您可以尝试使用 ruby -w 运行以获取更多信息,或者您可以在运行 ruby 脚本之前设置 RUBYLIBS 环境变量,例如
export RUBYLIB="/path/to/lib/ruby"
在开始时。