Capistranoのリモートコマンドから出力をキャプチャする方法は?
-
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
所属していません StackOverflow