Принятие пользовательского ввода из командной строки в командной строке
Я пишу настраиваемую задачу rake для Rails, и есть точка, в которой она суммирует, что она собирается делать, а затем спрашивает пользователя, правильно ли это делать.
puts "\n Is this what you want to happen? [Y/N]"
answer = gets.chomp
if answer == "Y"
# commits
else if answer == "N"
return false #(Aborts the rake task)
end
Однако этот код вызывает преждевременное прерывание грабли,
rake aborted!
No such file or directory - populate
" populate" - это имя задачи рейка.
Я думаю, что действительно вызывает эту ошибку в методе .gets.
Я не знаю, как явно работает метод .gets, но я предполагаю, что он должен автоматически отправить пользовательский ввод обратно в файл, где написано script, а для некоторых причина, по которой он запутывается, и думает, что имя команды rake - это имя файла. Поскольку populate.rake не существует, я думаю, именно поэтому возникает ошибка.
Однако я не знаю, как обойти эту ошибку. Использует ли rake альтернативный метод .gets?
Ответы
Ответ 1
Задачи Rake хранятся в папке lib/tasks
приложения Rails. Файл задачи рейка должен заканчиваться расширением .rake
; например: populate.rake
.
Принятие ввода выполняется с помощью STDIN.gets.chomp
вместо gets.chomp
.
namespace :db do
desc "Prints the migrated versions"
task :populate => :environment do
puts "\n Is this what you want to happen? [Y/N]"
answer = STDIN.gets.chomp
puts answer
if answer == "Y"
# your code here
elsif answer == "N"
return false # Abort the rake task
end
end
end
Вы можете запустить эту задачу рейка с помощью: rake db:populate