我想要像这样的厨师execute
资源运行ruby脚本。
execute "my_prog deamon" do
command %Q{bash -c 'export PATH="/usr/local/rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /opt/my_prog; ruby /opt/my_prog/my_prog_deamon.rb start'}
end
我收到这样的错误信息。
---- Begin output of bash -c 'export PATH="/usr/local/rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /opt/my_prog; ruby /opt/my_prog/my_prog_deamon.rb start' ----
STDOUT:
STDERR: /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- daemons (LoadError)
from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /opt/my_prog/my_prog_deamon.rb:2:in `<main>'
---- End output of bash -c 'export PATH="/usr/local/rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd /opt/my_prog; ruby /opt/my_prog/my_prog_deamon.rb start' ----
看起来错误的发生是因为来自chef
的ruby被调用而不是来自rbenv
的ruby。
我在食谱中将ruby
改写为/usr/local/rbenv/shims/ruby
,但我也遇到了同样的错误。
如何使用厨师运行ruby脚本? rbenv
已在系统范围内安装。
答案 0 :(得分:0)
错误似乎源自您的自定义脚本,错误表明无法加载需求(在本例中为daemons gem)。
您使用的ruby版本未安装正确的依赖项,或者$GEM_PATH
不正确,因此无法找到所需的依赖项。
如果您只从Chef食谱中运行此脚本,我建议您查看默认情况下由Chef提供的resource_script提供程序,特别是 resource_ruby 提供商:
ruby 'my_prog_deamon' do
...
end
如果这不是一个选项,我会通过Chef ruby运行脚本,并使用chef_gem
来安装所需的依赖项:
chef_gem('daemons') do
version 'x.y.z'
end
然后,当使用Chef gem调用脚本时,您可以确定已安装依赖项。
答案 1 :(得分:0)
我在配方中将ruby重写为/ usr / local / rbenv / shims / ruby,但是我得到了同样的错误。
由于垫片本身指向Chef的Ruby,因此很可能没有正确配置rbenv。如果rbenv找不到版本配置,它只会引导您找到它找到的第一个ruby。
使用以下方法之一检查您是否已指定所需版本:
https://github.com/sstephenson/rbenv#choosing-the-ruby-version