2013-09-30 43 views
14

我正在爲Rails編寫一個自定義Rake任務,它總結了要執行的操作的程序,然後詢問用戶它是什麼即將做的事是正確的。在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不存在,我認爲這就是錯誤被拋出的原因。

但是,我不知道如何解決這個錯誤。 提供替代方法.gets

+0

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

回答

21

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

+0

是,它.rake結束(不.RB,對不起,自動打字:P),它是在LIB /任務 – Starkers

+0

是的,我的劇本是完全一樣的 – Starkers

+0

奧科那麼什麼樣的錯誤你得到 –

相關問題