2012-07-03 2 views
6

Utilizzando chef Ho una ricetta semplice che installa un gioiello, esempio:Chef Ohai: Come usare appena installato rubino con gem_package

gem_package "passenger" do 
    version node['passenger']['version'] 
end 

Voglio anche installare Ruby con un altro libro di cucina, potrebbe essere Ruby 1.9 .3 per alcuni server e Ruby Enterprise 1.8.7 per altri. Così ho pensato che avrei potuto usare gem_binary e ohai per fare questo, come questo:

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

Ma poi iniziano i problemi, perché languages['ruby'] non viene modificato quando viene installata una nuova rubino. Ruby Enterprise si installa in /opt/ruby-enterprise e si aggiunge a PATH tramite /etc/profile.d/ree.sh ma non viene prelevato dallo ohai durante la stessa esecuzione, ma viene raccolto nella corsa successiva.

Nella prima manche, ohai dice che languages['ruby'] è installato in /opt/vagrant_ruby/bin/ruby quando viene utilizzato con vagrant e chef_solo disposizione. E la gemma del passeggero viene installata nel rubino sbagliato.

Come posso rendere ohai riconoscere il rubino appena installato?

risposta

1

Di solito sto lavorando con RVM che ha lo stesso problema. Lì solitamente indico il percorso del binario gem e lascia l'ultimo bit come attributo.

E.G.

qualcosa come

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 

In alternativa abbiamo usato bash blocchi e di provenienza del file appropriato. Nota quando si utilizza blocchi bash solo l'ultima cosa al blocco sarà utilizzato per determinare il successo, è spesso saggio catena di loro con &&

+0

non c'è un modo per aggiornare i 'lingue ohai attributo automatica [ 'ruby'] [ 'gem_bin']' a guardare il nuovo binario gemma installato? – Evgeny

1

Penso che ci sia un modo per ricaricare ohai attributi durante la corsa ricetta chef:

È necessario utilizzare risorsa ohai:

ohai "reload" do 
    action :reload 
end 

Vedere più qui: http://wiki.opscode.com/display/chef/Resources#Resources-Ohai

+0

problema con questo è che lo chef compila tutto all'inizio e facendo ohai: il ricaricamento non avrà effetto sulle risorse già compilate - quindi sta ancora usando il vecchio binario gem. – Evgeny

+0

Ho ricevuto il tuo problema, potrebbe essere questa risorsa può aiutare: http://wiki.opscode.com/display/chef/Resources#Resources-RubyBlock Come descrizione delle risorse dello Stato: 'risorsa Il ruby_block Rubino blocco può essere utilizzato per eseguire un po 'di codice Ruby durante una corsa. Il codice rubino nelle risorse ruby_block viene valutato con altre risorse durante la convergenza, mentre il codice Ruby al di fuori delle risorse ruby_block viene valutato prima delle altre risorse, durante la valutazione della ricetta (compilazione) .' – jakshi

+0

Ancora, come hai citato, tutti i riferimenti alle lingue ['ruby'] [ 'gem_binary'] al di fuori del ruby ​​block viene valutato all'inizio e non può essere modificato con il codice scritto all'interno di ruby_block. – Evgeny