4

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

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

有什么办法可以抑制这种情况吗?

4

2 回答 2

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
于 2017-08-31T23:28:21.350 回答
0

这可能是标准错误输出。如果是这样,您可以像这样将标准错误重定向到标准输出:

cap production invoke:rake TASK=mytask > out 2>&1
于 2017-08-18T23:19:46.623 回答