Ric*_*son 24 ruby shell capistrano
我想运行一个远程命令(在几个文件夹中的current_revision和HEAD的git diff)并捕获输出.
我试过run("git diff rev1 rev2 - folder | cat"),但是方法总是返回似乎返回nil(即使我能看到Capistrano输出中的diff输出).
有任何想法吗?我可以使用不同的方法来管理命令,或类似的东西吗?我不是一个Unix巫师,所以它可能是我在这里失踪的微不足道的东西.
Hei*_*kki 39
也许capture?
"捕获助手将在第一个匹配的服务器上执行给定的命令,并将命令的输出作为字符串返回."
https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Inspection-Capture
如果要捕获多个主机的输出,请使用带有块的运行:例如:
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
Run Code Online (Sandbox Code Playgroud)