启动时需要 ruby​​ 脚本中的 gem 失败

启动时需要 ruby​​ 脚本中的 gem 失败

我正在使用 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"

在开始时。

相关内容