Почему стандартный вывод не отображается из грабельной задачи, вызываемой обратными метками? - PullRequest
0 голосов
/ 05 января 2019

При вызове грабли через рюкзаки, ее вывод подавляется:

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

Почему вывод подавляется с помощью обратных кавычек и как его можно отобразить?

Вышеприведенный пример является надуманным, но в конечном итоге я хочу иметь возможность запускать локальную задачу rake, которая сама выполняет задачу удаленного rake, на Heroku, и я хочу видеть ее вывод в режиме реального времени (поскольку удаленная задача интерактивная , т.е. она задает вопросы через puts и ожидает пользовательского / стандартного ввода через $stdin.gets.chomp):

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

1 Ответ

0 голосов
/ 05 января 2019

Backticks возвращает стандартный вывод команды , поэтому, если вы хотите увидеть результат, просто наберите puts:

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

Если вы хотите интерактивное исполнение, вы можете попробовать использовать IO#expect

...