0

ユーザーが複数のサーバーで自動化されたタスクを実行できるようにする Rails Web アプリケーションがあります。5 分ごと (gem の場合) に rake タスクを実行し、実行する必要があるジョブをチェックし、適切なオプションでサーバーをスピンアップするように配線しました。

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

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.

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

コマンドはbashから問題なく実行されます...ナイフ部分のレーキでのみ失敗します

何かご意見は?


編集: mpapis の提案を使用して、RVM gem を使用しましたが、すべてが IRB でうまく機能します。私は次のことをします

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

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

解決策: mpapisは、特定の Ruby バージョン内でコードを実行できる驚異的な gem 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    
4

3 に答える 3

1

解決策: mpapisは、特定の Ruby バージョン内でコードを実行できる驚異的な gem 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    
于 2012-05-01T00:12:17.850 に答える
1

問題は、「sh」コマンドでシェルを起動すると、bash が sh の動作を継承し、rvm が適切にソースされないことです。

sh は RVM でサポートされていませんでしたが、Fedora 16 で X サーバーを起動する際に問題が発生したため、明示的に無効にする必要がありました。

于 2012-03-26T21:32:01.167 に答える
0

multi_json gem は、Chef ではなく、実際にはフォグに必要です。knife-rackspace プラグインは、multi_json gem を取り込む霧に依存しています。

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

これに Rake を使用することに決めている場合は、knife-rackspace gem に gemset を使用することをお勧めします。

于 2012-03-27T06:46:28.623 に答える