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

Evg*_*eny 6 ruby chef-infra

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

gem_package "passenger" do
  version node['passenger']['version']
end
Run Code Online (Sandbox Code Playgroud)

我还想用另一本食谱安装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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ena*_*ane 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
Run Code Online (Sandbox Code Playgroud)

或者,我们使用bash块并获取适当的文件。请注意,当使用 bash 块时,仅使用块中的最后一个内容来确定成功,将它们链接起来通常是明智的&&