2012-03-26 10 views
0

私は、ユーザーが複数のサーバーで自動化されたタスクを実行できるようにするレールWebアプリケーションを持っています。私はrakeタスクを5分ごとに実行し(gemのたびに実行する)、実行する必要があるジョブをチェックし、適切なオプションを使用してサーバーを起動します。シェフのナイフをレイクから実行

私の問題は実際にシェフのナイフコマンドを実行していることです。私は現在:

sh %{bash -c -l 'cd ~/opscode/FTW && source ~/.rvm/scripts/rvm && rvm use system && knife rackspace server list'} do |ok, res| 
    if ! ok 
    puts "meh? (status = #{res.exitstatus})" 
    puts res 
    end 
end 

私はそこに私を得ます。それは私が次を取得し、問題なくしかし、ナイフの実行時に適切なgemset(システムの)に切り替わり:

Could not find multi_json-1.1.0 in any of the sources 
Run `bundle install` to install missing gems. 

私は...システムの宝石にインストールバンドラを持っていないので、私はかなり混乱しています。私のWebアプリケーションではmulti-json-1.1.0が必要です。私のシェフのインストールにはmulti_json 1.0.3が必要と思われるので、宝石の必要条件が混在しているようです。

のbashからのコマンドを実行する問題はない...それが唯一のナイフ一部

でレーキ内の任意の考えを失敗しましたか?


EDIT: mpapisの提案を使用して、私はRVMの宝石を使用し、すべてがIRBで素晴らしい作品。私は以下を行う

RVM.use! 'system' 
env = RVM.current 
env.shell_wrapper.run_command("cd /my/path/to/opscode/FTW && knife rackspace server list") 

しかし、レールコンソールやレーキで同じコードを実行すると問題が発生します。 Railsコンソールは基本的に私のRVM.useを無視します!レーキは爆発する...それはバンドラー干渉と関係があるのだろうか?

解決策: mpapisは、特定のルビーバージョン内でコードを実行するための驚異的な宝石https://github.com/mpapis/rvm-withを作成しました。

RVM.with '1.8.7' do |r| 
    puts r.execute "unset RUBYOPT" 
    puts r.execute "cd /home/hunter/opscode/FTW && knife rackspace server list" 
    #puts r.execute "ruby --version" 
end  

答えて

1

解決策:mpapisは、特定のルビーバージョン内でコードを実行できる驚異的な宝石https://github.com/mpapis/rvm-withを作成しました。

RVM.with '1.8.7' do |r| 
    puts r.execute "unset RUBYOPT" 
    puts r.execute "cd /home/hunter/opscode/FTW && knife rackspace server list" 
    #puts r.execute "ruby --version" 
end  
1

あなたの問題は、SHの振る舞いを継承する「SH」コマンドはbash経由でシェルを起動し、RVMを適切に供給されないことです。

shがRVMによってサポートされていませんでしたが、我々は、Fedora 16の起動Xサーバで問題

+0

次に使用する必要はありますか? %x {}、system、 ''を使ってコマンドを実行しようとしました。システムは同じエラーを出し、 ''と%x {}は同等です。 .rvm/gems/ruby​​-1.9.2-p290 @ global/gems/bundler-1.0.21/lib/bundler/spec_set.rb: 88: 'materialize ':どのソースからでもmulti_json-1.1.0を見つけることができませんでした(Bundler :: GemNotFound) –

+0

rake経由でrvmを実行することはできませんか?それはむしろ不幸になるだろう –

+0

rvm-rubyの統合には宝石がある=> https://github.com/wayneeseguin/rvm-gemもしいくつかの機能主義者が足りない場合は - それをフォークして追加するか、誰か他の誰かができるようにする後でそれを見て – mpapis

0

multi_json宝石が実際に霧ではなく、シェフによって必要とされた後、明示的に無効にする必要がありました。ナイフラックスペースプラグインは、multi_json gemをもたらす霧に依存します。

現在のバージョンのfog(1.3.0)はmulti_json〜> 1.0に依存するため、1.1.0を使用してgemをアクティブ化することはできません。

このためにRakeを使用するように設定されている場合は、ナイフラックスペースの宝石用のジェムセットを使用することをおすすめします。

+0

それは正しい依存関係がないという問題ではないようです。私はすでに、すべての正しい宝石でナイフをうまく使っています。それは依存関係が正しいミックスアップの問題のようです。私は、mpapisのようなrvmの問題は、rvmが問題を説明するかもしれないshをサポートしていないと指摘した –

関連する問題