Capistranoのリモートコマンドから出力をキャプチャする方法は?

StackOverflow https://stackoverflow.com/questions/4723024

  •  12-10-2019
  •  | 
  •  

質問

リモートコマンド(current_revisionのgit diffとヘッドのいくつかのフォルダー)を実行し、出力をキャプチャしたい。

run( "git diff rev1 rev2 -folder | cat")を試しましたが、メソッドは常にnilを返すようです(キャピストラノ出力にdiff出力が表示された場合でも)。

何か案は?コマンドをパイピングするさまざまな手段などを使用できますか?私はUnixの魔法使いではないので、ここでは些細なことではないかもしれません。

役に立ちましたか?

解決

多分 capture?

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

https://github.com/capistrano/capistrano/wiki/2.x-dsl- action-inspection-capture

他のヒント

複数のホストの出力をキャプチャしたい場合は、ブロックでRUNを使用します。

 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top