1

私はVagrantとchefでこの問題を抱えています。使用する Vagrantfile とシェフのクックブックは既に用意されています。基本的に、vagrantfile はいくつかの環境変数によって構成されているため、Vagrantfile から新しい仮想マシンを作成できます。また、すべての構成とプロビジョニングはシェフによって行われますが、仮想マシンが終了すると、シェフは機能しません。

「vagrant provision」を実行すると、次のエラー メッセージが表示されます。

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find chef (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)

何かを壊さないように、あまりバージョンを変更することはできません... エラーメッセージからわかるように、rvm (1.15.8) があります。バージョン 1.9.3 の Ruby とバージョン 10.12.0 のシェフ。

仮想マシンを作成できたので、シェフが確実に機能する前に...しかし、何かが変わって何がわからない...すべてのシェフの役割/クックブック/を行ったり来たりしていますレシピですが、わかりません:(

RVM はすべてのユーザーにインストールされるため、環境設定には /etc/profile.d/rvm.sh が使用されます。

あなたからのいくつかのヒントが私を助けるかもしれません、ありがとう!

4

3 に答える 3

0

vagrant レシピを含める必要があります。vagrant ユーザーをrvmグループに追加し、chef-solo/chef-client ラッパー スクリプトをインストールします。

node['rvm']['vagrant']['system_chef_solo']およびnode['rvm']['vagrant']['system_chef_client']属性を使用して、(システム ruby​​ が配置されている場所に応じて) 正しいバイナリにラッパーを指すことを忘れないでください。

シェフソロの例:

chef.add_recipe "rvm::vagrant"

chef.json = {
  :rvm => {
    :vagrant => {
      :system_chef_solo => '/usr/lib/ruby/gems/1.8/gems/chef-11.4.0/bin/chef-solo',
      :system_chef_client => '/usr/lib/ruby/gems/1.8/gems/chef-11.4.0/bin/chef-client'
    }
  }
}

さらに、次の 2 つのオプションがあります。

于 2013-11-06T20:15:59.050 に答える
0

シェフがインストールrvmとルビーを実行するため、chef-solo実行方法を変更して接頭辞を付ける必要がありrvm system do chef-soloます。これによりrvm、Chef OmniBus ルビーや、使用したい/必要な他のルビーから確実に抜け出すことができます。

私の vagrantfile では、シェル プロビジョナーを使用して、次のようにchef-soloを実行しています。

# with rvm installed, chef will not work with its ruby. must use system!
[ -f /usr/local/rvm/bin/rvm ] && pfx="rvm system do"

$pfx chef-solo -c /vagrant/chef-solo.rb -j /vagrant/chef-solo.js --no-fork
于 2013-12-14T02:50:44.683 に答える