2012-07-03 7 views
6

で新しくインストールされたルビーを使用する私は宝石をインストールする簡単なレシピ、例があります。私も他の料理とルビーをインストールしたいシェフOhai:どのように<code>chef</code>を使用してgem_package

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

を、それが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経由で追加されますが、同じ実行中にohaiによって取得されませんが、次の実行でピックアップされます。最初の実行で

ohaivagrantchef_solo規定に使用された場合languages['ruby']/opt/vagrant_ruby/bin/rubyにインストールされていることを述べています。そして旅客の宝石は間違ったルビーにインストールされています。

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」]'を見てはありません新しくインストールされたgemバイナリ? – Evgeny

1

でそれらを賢明チェーンにされて、私はシェフのレシピを実行している間にohai属性をリロードする方法があると思う注意:

あなたはohaiリソースを使用する必要があります。

ohai "reload" do 
    action :reload 
end 

は、ここで詳細を参照してください。http://wiki.opscode.com/display/chef/Resources#Resources-Ohai

+0

この問題はシェフが始めてすべてをコンパイルし、ohaiを実行していることです。reloadはすでにコンパイルされたリソースには影響しません。したがって古いgemバイナリを使用しています。 – Evgeny

+0

私はあなたの問題を抱えて、この一つのリソースはあなたを助けることができることがありますhttp://wiki.opscode.com/display/chef/Resources#Resources-RubyBlockリソース記述状態として : 'ルビーブロック ruby​​_blockリソースができます実行中に少しRubyコードを実行するために使用することができます。 Ruby_blockリソース内のRubyコードは、コンバージェンス時に他のリソースとともに評価されますが、ruby_blockリソース外のRubyコードはレシピ評価(コンパイル)中に他のリソースよりも前に評価されます。 – jakshi

+0

引用したように、[[ruby] 'gem_binary']はrubyブロックの外側で評価され、ruby_blockの内部で書かれたコードでは変更できません。 – Evgeny

関連する問題