Capistrano 3:如何抑制状态输出?

时间:2017-08-18 23:05:23

标签: capistrano capistrano3 sshkit

我创建了一个Capistrano任务来执行rake命令。我计划将输出(STDOUT)重定向到文件。 E.g。

cap production invoke:rake TASK=mytask > out

这可行,但我的输出包括一些额外的Capistrano状态输出,例如

00:00 invoke:rake 01 $HOME/.rbenv/bin/rbenv exec bundle exec rake mytask ... ✔ 01 ubuntu@mydomain.com 11.399s

有没有办法压制这个?

2 个答案:

答案 0 :(得分:0)

它可能是stderr输出。如果是这样,您可以将标准错误重定向到标准输出,如下所示:

cap production invoke:rake TASK=mytask > out 2>&1

答案 1 :(得分:0)

好的,所以我想我找到了一个很好的解决方案。

关键是使用捕获(未在Capistrano 3.x中记录,但仍然有效)。 https://github.com/capistrano/capistrano-2.x-docs/blob/master/2.x-DSL-Action-Inspection-Capture.md

namespace :invoke do
  desc "Execute a rake task on a remote server"
  task :rake do
    if ENV['TASK']
      on roles(:app) do
        with rails_env: fetch(:rails_env) do
          puts capture :rake, ENV['TASK']
        end
      end
    else
      puts "\n\nFailed! You need to specify the 'TASK' parameter!",
          "Usage: cap <stage> invoke:rake TASK=your:task"
    end
  end
end