2012-07-03 72 views
6

使用chef使用新安裝的紅寶石我有一個簡單的食譜,安裝一個寶石,例如:廚師Ohai:如何與gem_package

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 Enterprise安裝到/opt/ruby-enterprise,並通過/etc/profile.d/ree.sh將其自身添加到PATH,但在同一運行過程中未被ohai拾取,但在下一次運行中得到拾取。

在第一次運行,ohailanguages['ruby']安裝在/opt/vagrant_ruby/bin/rubyvagrantchef_solo規定使用時。乘客寶石被安裝成錯誤的紅寶石。

我該如何讓ohai識別新安裝的紅寶石?

回答

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塊只能在塊的最後一件事將被用來確定是否成功時,它往往是明智的鏈將它們與&&

+0

是不是有某種方式來更新ohai自動屬性'語言[「紅寶石」] [「gem_bin」]'看新安裝的寶石二進制文件? – Evgeny

1

我認爲有一種方式來加載運行廚師食譜中ohai屬性:

您需要使用ohai資源:

ohai "reload" do 
    action :reload 
end 

查看更多在這裏:http://wiki.opscode.com/display/chef/Resources#Resources-Ohai

+0

這個問題是廚師在一開始就編譯所有東西,並且做ohai:重新加載不會影響已編譯的資源 - 所以它仍然使用舊的gem二進制文件。 – Evgeny

+0

我收到了你的問題,可能是這一個資源可以幫助你:http://wiki.opscode.com/display/chef/Resources#Resources-RubyBlock 資源描述的狀態:'紅寶石座 的ruby_block資源能用於在運行期間執行一些Ruby代碼。 ruby_block資源中的Ruby代碼在收斂期間用其他資源進行評估,而ruby_block資源之外的Ruby代碼在其他資源評估(編譯)期間被評估。' – jakshi

+0

同樣,正如您引用的,所有對語言['ruby'] [ 'ruby_block'外部的'gem_binary']在開始時被評估,並且不能用在ruby_block中寫入的代碼來改變。 – Evgeny