Sta*_*ers 15 ruby rake ruby-on-rails
我正在为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
Run Code Online (Sandbox Code Playgroud)
但是,此代码会导致rake过早中止;
rake aborted!
No such file or directory - populate
Run Code Online (Sandbox Code Playgroud)
" populate "是rake任务的名称.
我认为在.gets方法中导致此错误的原因是什么.
我不知道.gets方法是如何显式工作的,但我猜它必须自动将用户输入发送回写入脚本的文件,并且由于某种原因它变得混乱并且它认为是rake的名称task是文件的名称.由于populate.rake不存在,我认为这就是抛出错误的原因.
但是,我不知道如何解决这个错误.rake是否为.gets提供了另一种方法?
Raj*_*Das 24
Rake任务存储在lib/tasksRails应用程序的文件夹中.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
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令运行此rake任务: rake db:populate