2012-07-03 5 views
6

chef kullanma ile Ruby yüklü kullanmak nasıl bir mücevher, örnek yükler basit bir reçete Bazı sunucular için .3 ve diğerleri için Ruby Enterprise 1.8.7.Chef Ohai:</p> <pre><code>gem_package "passenger" do version node['passenger']['version'] end </code></pre> Ben de başka bir yemek kitabı ile yakut yüklemek istediğiniz <p>, bu Ruby 1.9 olabilir: yeni gem_package

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

Ama sonra sorunlar başlar, yeni bir yakut yüklendiğinde languages['ruby'] değişmez, çünkü: Ben böyle, bunu yapmak için gem_binary ve ohai kullanabileceğini düşündüm. Ruby Enterprise, /opt/ruby-enterprise'a yükler vearacılığıyla PATH'a ekler, ancak aynı işlem sırasında ohai tarafından alınmaz, ancak sonraki işlemde yakalanır. İlk vadede

, ohai vagrant ve chef_solo hükmüne kullanıldığında languages['ruby'] /opt/vagrant_ruby/bin/ruby yüklendiğini söylüyor. Ve yolcu gemisi yanlış yakutun içine yerleştirildi.

ohai Yeni yüklenen Ruby'yi nasıl tanıyabilirim?

cevap

1

Genellikle aynı sorunu olan RVM ile çalışıyorum. Orada genellikle gem ikili yolunu yeniden kodlarım ve son bitimi bir öznitelik olarak bırakırım.

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 

gibi

şey Alternatif biz bash blok kullanılmış ve uygun dosyayı kaynaklı var.

: blokta sadece son şey başarısını belirlemek için kullanılacak bash blokları kullanırken ohai çalışan şef tarifi sırasında niteliklerini yeniden bir yol var o &&

+0

ohai otomatik nitelik 'dilleri güncellemek için bazı yol değildir yoktur [ 'yakut'] [ 'gem_bin']' bakmak yeni yüklü taş ikili mi? – Evgeny

1

ile zincire onları çoğu zaman akıllıca olacaktır, unutmayın

ohai "reload" do 
    action :reload 
end 

burada görün: Sen ohai kaynağı kullanmak gerekir http://wiki.opscode.com/display/chef/Resources#Resources-Ohai

+0

Bu sorun, şefin en başından her şeyi derlemesi ve ohai yapması: yeniden yükleme zaten derlenmiş kaynakları etkilemeyecek - bu yüzden eski taşlı ikili kullanıyor. – Evgeny

+0

Sorununuzu aldım, bu bir kaynağın size yardımcı olabileceği olabilir: http://wiki.opscode.com/display/chef/Resources#Resources-RubyBlock Kaynak açıklaması durumu olarak: 'Ruby Block ruby_block kaynağı Bir işlem sırasında bir parça Ruby kodunu çalıştırmak için kullanılır. Ruby_block kaynaklarındaki Ruby kodu, yakınsama sırasında diğer kaynaklarla değerlendirilirken, ruby_block kaynaklarının dışındaki Ruby kodu, diğer kaynaklardan önce, reçete değerlendirmesi (derleme) sırasında değerlendirilir. ” – jakshi

+0

Yine de, alıntı yaptığınız gibi, tüm dillere referanslar ['ruby'] [ Yakut bloğu dışındaki 'gem_binary'] en baştan değerlendirilir ve ruby_block içinde yazılan kod ile değiştirilemez. – Evgeny

İlgili konular