2013-02-27 59 views
1

我做了一個交互式rake任務來完成管理任務。此任務通過STDIN.gets.strip獲得輸入,並按照計劃在本地運行:輸入某個值,然後按Enter,任務在下一個STDIN.gets.strip處繼續運行。Heroku上的Rake任務:STDIN.gets.strip - 「Enter」鍵的行爲按下兩次

但是,當我試圖通過heroku寶石(在Windows 7中)在Heroku上運行:

heroku run rake admin --app my-application 

它承認Enter鍵按下兩次 - 第一次與價值,第二次則是剛剛Enter ,沒有價值。

如何防止這種行爲?我可以在STDIN.gets.strip之後以某種方式清理輸入緩衝區嗎?

回答

0

我個人認爲這是錯誤的做法。

倒不如簡單地定義你的rake任務採取的命令行參數,那麼你並不需要處理交互式輸入

的麻煩,請參閱該問題的更多細節

Rails Rake: How to pass in arguments to a task with :environment

+0

我知道如何完成需要參數的任務,並且有多種類型的任務,但是我不喜歡這種方法,原因如下:1.每個rake任務準備運行很長一段時間,然後快速完成工作。我很惱火。交互式任務使我可以在20秒內完成10個耙子任務。這10個rake任務佔用2分鐘(包括等待); 2.我必須用rake -T列出rake任務(並等到它開始實際列出任務)。我必須記住每個任務的調用語法。 – Paul 2013-02-27 15:10:31

+1

P.S. Mark,我在交互式rake任務中詢問STDIN,但你回答說我不需要交互式rake任務。在嚴格的條件下,我不得不降低你的答案,但實際上不會這樣做。 – Paul 2013-02-27 15:12:21

+0

您好,我很欣賞您的評論,但有一個想法,如果需要輸入的問題需要20秒才能完成,您可以不在該網站中爲該輸入創建接口,然後擁有一個接受輸入的網頁,然後運行任務處理。 20秒不會吹出Heroku 30秒的限制。 – 2013-02-27 16:44:27