6

を使用しchefて、宝石をインストールする簡単なレシピがあります。例:

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

また、別のクックブックで Ruby をインストールしたいと考えています。一部のサーバーでは Ruby 1.9.3 であり、他のサーバーでは Ruby Enterprise 1.8.7 である可能性があります。だから私は、次のようにこれを行うためgem_binaryに andを使用できると考えました:ohai

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

languages['ruby']しかし、新しいルビーがインストールされたときに変更されないため、問題が発生します。Ruby Enterprise はviaにインストールし/opt/ruby-enterpriseて自分自身を追加しますが、同じ実行中には取得されませんが、次の実行で取得されます。PATH/etc/profile.d/ree.shohai

最初の実行では、プロビジョニングと使用時にインストールされるohaiことを言います。そしてパッセンジャーの宝石は間違ったルビーにインストールされます。languages['ruby']/opt/vagrant_ruby/bin/rubyvagrantchef_solo

ohai新しくインストールされたルビーを認識させるにはどうすればよいですか?

4

2 に答える 2

1

chefレシピの実行中にohai属性をリロードする方法があると思います。

ohaiリソースを使用する必要があります:

ohai "reload" do
  action :reload
end

詳細はこちら:http ://wiki.opscode.com/display/chef/Resources#Resources-Ohai

于 2012-08-07T08:48:57.037 に答える
1

通常、私は同じ問題を抱えているRVMで作業しています。通常、gem バイナリへのパスをハードコーディングし、最後のビットを属性として残します。

例えば

何かのようなもの

  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 ブロックを使用する場合、ブロック内の最後のもののみが成功を判断するために使用されることに注意してください。&&

于 2012-07-05T00:56:40.637 に答える