如何使用rbenv的厨师运行ruby脚本?

时间:2014-04-13 09:02:52

标签: ruby chef rbenv

我想要像这样的厨师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已在系统范围内安装。

2 个答案:

答案 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