我创建了一个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
有没有办法压制这个?
答案 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