【问题标题】:Accepting user input from the console/command prompt inside a rake task在 rake 任务中接受来自控制台/命令提示符的用户输入
【发布时间】:2013-09-30 06:21:38
【问题描述】:

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

populate”是 rake 任务的名称。

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

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

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

【问题讨论】:

标签: ruby-on-rails ruby rake


【解决方案1】:

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

【讨论】:

  • 是的,它以 .rake 结尾(不是 .rb,抱歉,自动输入:P),它在 lib/tasks 中
  • 是的,我的脚本就是这样
  • rake db:populate 这是你想要发生的事情吗[Y/N] rake 中止了!没有这样的文件或目录 db:populate
  • 固定应该是STDIN.gets.chomp
  • 是的,和你同时发现的!仍然是完全有效的答案,它可以帮助许多未来的用户:)
猜你喜欢
  • 2018-10-11
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多