2017-08-18 50 views
4

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

cap production invoke:rake TASK=mytask > out

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

00:00 invoke:rake 01 $HOME/.rbenv/bin/rbenv exec bundle exec rake mytask ... ✔ 01 [email protected] 11.399s

有什么办法来抑制呢?

回答

0

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

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

will_in_wi,事实并非如此。 –

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