在rake任务中接受来自控制台/命令提示符的用户输入

我正在为Rails编写一个自定义rake任务,并且该程序有一点总结了它将要执行的操作,然后询问用户它将要执行的操作是否正确。

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过早中止;

 rake aborted! No such file or directory - populate 

populate ”是rake任务的名称。

我认为在.gets方法中导致此错误的原因是什么

我不知道.gets方法是如何显式工作的,但我猜它必须自动将用户输入发送回写入脚本的文件,并且由于某种原因它变得混乱并且它认为是rake的名称task是文件的名称。 由于populate.rake不存在,我认为这就是抛出错误的原因。

但是,我不知道如何解决这个错误。 rake是否为.gets提供了另一种方法?

Rake任务存储在Rails应用程序的lib/tasks文件夹中。 rake任务的文件应该以.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任务: rake db:populate