1

当通过背包调用 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
4

1 回答 1

1

反引号返回命令的标准输出,因此如果您想查看结果,只需调用puts

task :one do
    puts 'one'
    puts `heroku run rake my_app:reset_user_passwords --app #{MY_APP_NAME}`
end

如果您想要交互式执行,可以尝试使用IO#expect

于 2019-01-04T21:19:11.497 回答