【问题标题】:How to capture output from a remote command in Capistrano?如何在 Capistrano 中捕获远程命令的输出?
【发布时间】:2011-01-18 10:33:26
【问题描述】:

我想运行一个远程命令(几个文件夹中的 current_revision 和 HEAD 的 git diff)并捕获输出。

我试过 run("git diff rev1 rev2 -- folder | cat"),但总是返回的方法似乎返回 nil(即使我可以在 Capistrano 输出中看到 diff 输出)。

有什么想法吗?我可以使用不同的方法来管道命令,或者类似的东西吗?我不是 Unix 向导,所以我在这里缺少一些微不足道的东西。

【问题讨论】:

    标签: ruby shell capistrano


    【解决方案1】:

    也许capture

    “捕获助手将在第一个匹配的服务器上执行给定的命令,并将命令的输出作为字符串返回。”

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

    【讨论】:

    • 未来更新:capture 似乎也适用于 Capistrano 3,即使我无法在文档中找到关于它的提及...
    【解决方案2】:

    如果要捕获多个主机的输出,请使用带有块的运行:例如:

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多