我正在为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
“填充”是佣金任务的名称。
我认为 .gets 方法确实导致了这个错误。
我不知道 .gets 方法是如何显式工作的,但我猜它必须自动将用户输入发送回写入脚本的文件,并且由于某种原因它是变得困惑,它认为rake任务的名称是文件的名称。由于 populate.rake 不存在,我认为这就是抛出错误的原因。
但是,我不知道如何解决这个错误。 rake 是否为 .gets 提供了另一种方法?
答案 0 :(得分:22)
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