2015-05-22 45 views
1

我正在使用領班在本地爲我的開發環境運行我的服務器和延遲作業進程。由於delayed_job重新加載而在開發期間中止的工頭

延遲作業會自動重新加載我的代碼,如果我在代碼中出現語法錯誤,延遲作業進程正在退出並導致工頭也停止所有其他進程。這意味着如果我在開發環境中保存有錯誤的文件會停止。

從堆棧跟蹤的關鍵線(我相信):

17:22:18 delayed_jobs.1 | rake aborted! 
17:22:18 delayed_jobs.1 | SyntaxError: /home/james/dev/myproject/app/helpers/icon_helper.rb:11: syntax error, unexpected end-of-input, expecting keyword_end 
... 
17:22:18 delayed_jobs.1 | /home/james/.rvm/gems/[email protected]/gems/actionpack-4.2.1/lib/action_dispatch/middleware/reloader.rb:55:in `prepare!' 
17:22:18 delayed_jobs.1 | /home/james/.rvm/gems/[email protected]/gems/delayed_job-4.0.6/lib/delayed/worker.rb:298:in `reload!' 
... 
17:22:18 delayed_jobs.1 | Tasks: TOP => jobs:work 
17:22:18 delayed_jobs.1 | (See full trace by running task with --trace) 
17:22:18 delayed_jobs.1 | exited with code 1 
17:22:18 system   | sending SIGTERM to all processes 
17:22:18 webserver.1  | Exiting 
17:22:18 webserver.1  | terminated by SIGTERM 

我知道我可以從config.cache_classes = false重裝停止delayed_job的,但我想這是真實的,這樣我的網絡服務器重新加載每個班請求。

我會爲delayed_job將重新加載我的課程。有沒有延遲工作嘗試重新加載但在重新加載失敗時保持運行的方法?如果沒有,是否有不同的方式來關閉延遲工作的重新加載?

回答

1

我的同事建議包裹在剛剛重新啓動它的腳本延遲工作,如果它意外退出(以myproject/script/delayed_job.sh):

#!/bin/bash 
while true; do 
    bundle exec rake jobs:work 
    echo 'Delayed jobs quit... restarting in 5s' 
    sleep 5 
done 

中Procfile:

delayed_jobs: script/delayed_jobs.sh 

這個腳本做工作我們需要。

相關問題