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

时间:2013-09-30 06:21:39

标签: ruby-on-rails ruby 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

填充”是佣金任务的名称。

我认为 .gets 方法确实导致了这个错误。

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

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

1 个答案:

答案 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