当通过背包调用 rake 任务时,它的输出被抑制:
task :two do
puts 'two'
end
task :one do
puts 'one'
`rake two`
end
-bash> bundle exec rake one
one
而通过以下方式调用时会显示输出.invoke:
task :one do
puts 'one'
Rake::Task['two'].invoke
end
-bash> bundle exec rake one
one
two
为什么用反引号抑制输出,如何显示?
上面是一个人为的例子,但最终我希望能够在 Heroku 上运行一个本地 rake 任务,它本身运行一个远程 rake 任务,我想实时查看它的输出(因为远程任务是交互式的,即它通过提问puts并通过 ) 等待用户/标准输入$stdin.gets.chomp:
task :one do
puts 'one'
`heroku run rake my_app:reset_user_passwords --app #{MY_APP_NAME}`
end