2013-09-30 1 views
14

Ich schreibe eine benutzerdefinierte Rake-Aufgabe für Rails, und es gibt einen Punkt das Programm, wo es zusammenfasst, was es tun wird und fragt dann den Benutzer, was es ist zu tun ist richtig.Akzeptieren von Benutzereingaben von der Konsole/Eingabeaufforderung in einer Rake-Aufgabe

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 

Dieser Code führt jedoch dazu, dass der Rake vorzeitig abgebrochen wird;

rake aborted! 
No such file or directory - populate 

"bevöl" ist der Name der Rake-Aufgabe.

Ich denke, was verursacht wirklich diesen Fehler in der .gets Methode.

Ich weiß nicht, wie die .gets Methode explizit funktioniert, aber ich denke, es muss automatisch die Benutzereingaben zurück zu der Datei senden, wo das Skript geschrieben wird, und aus irgendeinem Grund wird es verwirrt und es denkt, der Name der Rake-Aufgabe ist der Name der Datei. Als populate.rake existiert nicht, ich denke, das ist der Grund, warum der Fehler geworfen wird.

Allerdings weiß ich nicht, wie ich diesen Fehler umgehen kann. Bietet rake eine alternative Methode zu .gets?

+0

http://stackoverflow.com/questions/5427839/is-it-possible-to-make-an-interactive-rake-task – tihom

Antwort

21

Rake-Aufgaben werden im Ordner lib/tasks der Rails-Anwendung gespeichert. Die Datei der Rake-Aufgabe sollte mit der Erweiterung enden; zum Beispiel: populate.rake.

Die Übernahme der Eingabe erfolgt mit STDIN.gets.chomp anstelle von 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 

Sie können diese Rake Aufgabe ausführen mit: rake db:populate

+0

Ja , endet es mit .rake (nicht .RB, sorry, automatische Eingabe: P) und es ist in lib/Aufgaben – Starkers

+0

Ja, mein Skript ist genau wie die – Starkers

+0

oko dann, welcher Fehler erhalten Sie –