为什么通过反引号调用的rake任务没有显示标准输出?

时间:2019-01-04 21:01:10

标签: ruby output rake rake-task backticks

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

1 个答案:

答案 0 :(得分:1)

反引号return the standard output of command,因此,如果您想查看结果,只需致电puts

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

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