2011-01-18 9 views
24

リモートコマンド(いくつかのフォルダでcurrent_revisionとHEADのgit diff)を実行し、出力を取り込みたいとします。Capistranoのリモートコマンドからの出力をキャプチャするには?

私は( "git diff rev1 rev2 - folder | cat")を実行しようとしましたが、常に返り値を返すように見えます(たとえCapistrano出力のdiff出力が見えても)。

アイデア?コマンドをパイプするなど、さまざまな方法を使用できますか?私はUnixの魔法使いではありません。だから、ここで行方不明の些細なものかもしれません。

答えて

38

capture

"キャプチャヘルパーは、最初に一致するサーバーで指定されたコマンドを実行し、コマンドの出力を文字列として返します。

https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture

+0

更新: 'capture'も、あまりにもカピストラーノ3で動作するようです私はドキュメンテーションでそれについての言及を見つけることができませんでした... – Smar

5

あなたが複数のホストの出力をキャプチャしたい場合は、使用ブロックで実行します。例えば:未来から

desc "capture output from multiple servers" 
    task :capture_multiple_servers, :roles => [:some_servers] do 
    results = {} 
    run "hostname --fqdn" do |channel, stream, data| 
     if stream == :out 
     results[channel[:host]] = [] unless results.key?(channel[:host]) 
     results[channel[:host]] << data if stream == :out 
     end 
    end 
    puts "Your results were:" 
    results.keys.sort.each do | host | 
     puts "#{host}:#{results[host].join}" 
    end 
    end 
関連する問題