>我创建了一个 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
有什么办法可以抑制这一点吗?
这可能是标准输出。如果是这样,您可以将标准错误重定向到标准输出,如下所示:
cap production invoke:rake TASK=mytask > out 2>&1
好的,所以我想我想出了一个很好的解决方案。
关键是使用捕获(在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 "nnFailed! You need to specify the 'TASK' parameter!",
"Usage: cap <stage> invoke:rake TASK=your:task"
end
end
end