我正在为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 aborted! No such file or directory - populate
“填充”是耙子任务的名称.
我不知道.gets方法如何显式地工作,但是我猜测它必须自动将用户输入发送回脚本写入的文件,并且由于某种原因,它会变得困惑,并且认为耙子的名称任务是文件的名称.由于populate.rake不存在,我认为这就是为什么会抛出错误.
解决方法
Rake任务存储在Rails应用程序的lib / tasks文件夹中.耙子任务的文件应以.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