オープンソースこねこね

Webプログラミングなどについてあれこれ。

RVMをインストールするとchefが"Could not find chef"となってしまう場合の対処方法

chefがOmnibus Installationで/opt/chef/配下に組み込みRubyと一緒にインストールされている環境にて、別途RVMのRubyを入れると、以下のようなエラーが表示されて動作しなくなりました。

# chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

/opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find chef (>= 0) amongst [bundler-1.3.5, bundler-unload-1.0.1, rake-10.1.0, rubygems-bundler-1.2.0, rvm-1.11.3.8] (Gem::LoadError)
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems.rb:1231:in `gem'
        from /opt/chef/bin/chef-solo:22:in `<main>'

そんでちょっと調べてみたら、公式サイトにもこの現象について書かれています。

http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac

OmnibusのGemよりRVMのGemを先に探しに行くらしいのでエラーになるらしい。

対処法ですが、sudosudo -sを使って実行すれば、/etc/profile.d/rvm.shをロードしなくなるのでRVMの影響をさけることができ、Omunibusの閉じた環境で実行してくれます。

# sudo chef-solo -c /var/chef/config/solo.rb -j /var/chef/nodes/devel.localdomain.json

現在のログインユーザがrootでもsudoするのがミソです。