2013-09-30 13 views
14

Piszę niestandardowe zadanie rake'u dla Rails, i jest punkt, w którym program podsumowuje, co zamierza zrobić, a następnie pyta użytkownika, czy to, co jest zamiar zrobić jest poprawny.Akceptowanie danych wprowadzanych przez użytkownika z konsoli/wiersza poleceń wewnątrz zadania 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 

Jednak kod ten powoduje przedwczesne przerwanie prowizji;

rake aborted! 
No such file or directory - populate 

"Populate" to nazwa zadania nachylenia.

Myślę, że to, co naprawdę powoduje ten błąd w metodzie .gets.

Nie wiem, jak metoda jawnie działa, ale domyślam się, że musi automatycznie wysłać dane użytkownika z powrotem do pliku, w którym napisany jest skrypt, i z jakiegoś powodu robi się zdezorientowany. uważa, że ​​nazwa zadania rake jest nazwą pliku. Ponieważ populate.rake nie istnieje, myślę, że właśnie dlatego błąd jest zgłaszany.

Jednak nie wiem, jak mogę obejść ten błąd. Czy rake oferuje alternatywną metodę na .gets?

+0

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

Odpowiedz

21

Zadania rake są przechowywane w folderze lib/tasks aplikacji Rails. Plik zadania rake'u powinien kończyć się rozszerzeniem .rake; na przykład: populate.rake.

Przyjmowanie danych wejściowych odbywa się za pomocą STDIN.gets.chomp zamiast 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 

Można uruchomić to zadanie natarcia: rake db:populate

+0

Tak , kończy się na .rake (nie .rb, przepraszam, automatyczne pisanie: P) i jest w lib/task – Starkers

+0

Tak, mój skrypt jest dokładnie taki jak ten – Starkers

+0

oko, a następnie jaki błąd dostaniesz –

Powiązane problemy