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 aborted!
No such file or directory - populate

" populate " は rake タスクの名前です。

.getsメソッドでこのエラーが実際に発生している原因は何だと思います。

.getsメソッドが明示的にどのように機能するかはわかりませんが、スクリプトが記述されているファイルにユーザー入力を自動的に送り返す必要があると推測しています。何らかの理由で混乱しており、レーキの名前を考えていますtask はファイルの名前です。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 に答える