16

我正在为 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

填充”是 rake 任务的名称。

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

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

但是,我不知道如何解决此错误。rake是否提供.gets的替代方法?

4

1 回答 1

27

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

您可以使用以下命令运行此 rake 任务:rake db:populate

于 2013-09-30T06:29:00.583 回答