6

使用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

但随后问题开始了,因为languages['ruby']安装新的 ruby​​ 时没有改变。Ruby Enterprise 安装到via 中/opt/ruby-enterprise并将其自身添加到PATHvia中,但在同一运行期间/etc/profile.d/ree.sh不会被拾取ohai,但会在下一次运行中被拾取。

在第一次运行时,ohailanguages['ruby']安装在/opt/vagrant_ruby/bin/ruby使用vagrantchef_solo配置时。乘客宝石安装到错误的红宝石中。

我怎样才能ohai识别新安装的红宝石?

4

2 回答 2

1

我认为有一种方法可以在运行 chef recipe 期间重新加载 ohai 属性:

您需要使用 ohai 资源:

ohai "reload" do
  action :reload
end

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

于 2012-08-07T08:48:57.037 回答
1

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

例如

就像是

  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 块时,仅使用块中的最后一项来确定成功,将它们链接起来通常是明智的&&

于 2012-07-05T00:56:40.637 回答