使用chef
我有一个安装gem的简单配方,例如:
gem_package "passenger" do
version node['passenger']['version']
end
我还想用另一本食谱安装ruby,对于某些服务器可能是Ruby 1.9.3,对于其他服务器可能是Ruby Enterprise 1.8.7。所以我认为我可以使用gem_binary
和ohai
来执行此操作,如下所示:
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/ruby
和vagrant
条款一起使用时已安装chef_solo
。乘客宝石安装在错误的红宝石中。
如何让ohai
识别新安装的红宝石?
答案 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