2012-03-11 136 views
3

我有一個用Rails編寫的應用程序,部署在Heroku上。我以前一直在使用1臺網絡測試儀,但是今天我發佈了這個應用程序,流量很大,所以我決定增加4臺網絡測試儀和1臺工作臺測試儀。我不知道爲什麼總是當我做heroku ps它表明:Heroku dyno/worker開始崩潰

Process State   Command        
-------- -------------- --------------------------------- 
web.1  up for 22s  bundle exec rails server -p $PORT 
web.2  up for 36s  bundle exec rails server -p $PORT 
web.3  up for 25s  bundle exec rails server -p $PORT 
web.4  up for 22s  bundle exec rails server -p $PORT 
worker.1 crashed for 7s bundle exec rake jobs:work 

工人賽道heroku scale worker=1後直接崩潰。日誌如下:

2012-03-11T23:12:18+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work` 
2012-03-11T23:12:19+00:00 heroku[worker.1]: State changed from starting to up 
2012-03-11T23:12:22+00:00 app[worker.1]: rake aborted! 
2012-03-11T23:12:22+00:00 app[worker.1]: Don't know how to build task 'jobs:work' 
2012-03-11T23:12:22+00:00 app[worker.1]: 
2012-03-11T23:12:22+00:00 app[worker.1]: (See full trace by running task with --trace) 
2012-03-11T23:12:23+00:00 heroku[worker.1]: Process exited with status 1 
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from up to crashed 
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from crashed to created 
2012-03-11T23:12:23+00:00 heroku[worker.1]: State changed from created to starting 
2012-03-11T23:12:32+00:00 heroku[worker.1]: Starting process with command `bundle exec rake jobs:work` 
2012-03-11T23:12:32+00:00 heroku[worker.1]: State changed from starting to up 
2012-03-11T23:12:36+00:00 app[worker.1]: rake aborted! 
2012-03-11T23:12:36+00:00 app[worker.1]: Don't know how to build task 'jobs:work' 
2012-03-11T23:12:36+00:00 app[worker.1]: 
2012-03-11T23:12:36+00:00 app[worker.1]: (See full trace by running task with --trace) 
2012-03-11T23:12:37+00:00 heroku[worker.1]: Process exited with status 1 
2012-03-11T23:12:37+00:00 heroku[worker.1]: State changed from up to crashed 

就是這樣。你有什麼想法,爲什麼? Web dynos工作正常。我必須在我的應用程序中配置某些東西來使用工人dynos嗎?

如果你能用人類的語言來解釋我,我將不勝感激將heroku平臺分割成網絡和工人dynos的邏輯是什麼?我已閱讀文檔次數,但我仍然認爲我錯過了理解它的觀點,因爲我在世界上長大,在這個世界裏你有存儲限制和東西。

回答

2

工作人員用於後臺處理,例如發送電子郵件,從某些Web服務獲取數據,通常用於需要很長時間的任何任務,而且不希望用戶等待它以查看頁。 這是一個應該用於性能的想法,因爲如果您使用Web dynos發送10封電子郵件,那麼他們沒有響應用戶請求,所以您無法處理如此多的用戶。

德克必須排隊,工人們應該檢查隊列來完成這項工作!

因此,您的工作人員崩潰,因爲您沒有定義任何作業,所以他可以等待該作業的隊列。查看這個gem瞭解如何設置作業和隊列任務的信息。

https://github.com/defunkt/resque

另一件事,工人可用於它安排一些任務,比如cron作業。這是一個尋求幫助的寶石。

https://github.com/javan/whenever

我強烈建議你觀看RailsCasts

http://railscasts.com/episodes/171-delayed-job

http://railscasts.com/episodes/271-resque

+0

這解釋了很多這太視頻。非常感謝你的回答! – 2012-03-12 00:28:07

+0

我很高興能幫上忙。我害怕我的英語技能不足以解釋它。 – 2012-03-12 00:35:11