Chef Ohai:如何使用gem_package新安装的Ruby

时间:2012-07-03 15:42:51

标签: ruby chef

使用chef我有一个安装gem的简单配方,例如:

gem_package "passenger" do
  version node['passenger']['version']
end

我还想用另一本食谱安装ruby,对于某些服务器可能是Ruby 1.9.3,对于其他服务器可能是Ruby Enterprise 1.8.7。所以我认为我可以使用gem_binaryohai来执行此操作,如下所示:

gem_package "passenger" do
  version node['passenger']['version']
  gem_binary "#{languages['ruby']['bin_dir']/gem}"
end

然后问题开始了,因为安装新ruby时languages['ruby']没有改变。 Ruby Enterprise安装到/opt/ruby-enterprise并通过PATH将自己添加到/etc/profile.d/ree.sh,但ohai在同一次运行期间没有被选中,但会在下次运行中被选中

在第一次运行中,ohai表示languages['ruby']/opt/vagrant_ruby/bin/rubyvagrant条款一起使用时已安装chef_solo。乘客宝石安装在错误的红宝石中。

如何让ohai识别新安装的红宝石?

2 个答案:

答案 0 :(得分:1)

通常我正在使用具有相同问题的RVM。在那里,我通常硬编码gem二进制文件的路径,并将最后一位留作属性。

E.G。

类似

  5   node["rvm"]["rubies"].each do |ruby|
  6     gem_package "[#{ruby}]-passenger" do
  7       package_name "passenger"
  8       version node[:passenger][:version]
  9       gem_binary "/usr/local/rvm/bin/gem-#{ruby}"
 10       options "--no-ri --no-rdoc"
 11     end
 12   end

或者,我们使用了bash块并获取了相应的文件。请注意,使用bash块时,只会使用块中的最后一项来确定成功,通常可以将它们与&&链接起来

答案 1 :(得分:1)

我认为有一种方法可以在运行厨师食谱时重新加载ohai属性:

您需要使用ohai资源:

ohai "reload" do
  action :reload
end

在此处查看更多内容:http://wiki.opscode.com/display/chef/Resources#Resources-Ohai