2013-07-25 54 views

回答

4

更新:下面的解決方案工作,但不建議。對於heroku上的resque concurrency,使用resque-pool寶石。


如果您使用COUNT=*選項,則可能會出現這種情況。你procfile看起來像:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb 
resque: env TERM_CHILD=1 COUNT=2 RESQUE_TERM_TIMEOUT=6 QUEUE=* bundle exec rake resque:workers 

這是impotant要注意的是,在Procfile rake任務是resque:workersresque:work


更新說明

沒有與COUNT=*選項和rake resque:workers調用生產在Heroku上的重大問題。由於resque使用線程啓動多個工作人員,所有SIGTERMSIGKILL等處理允許工人停止當前工作,重新排隊工作並正常關閉(包括取消註冊)將會發生。這是因爲信號由主進程處理而不被線程捕獲。這可能會導致幻影工作者在被殺後很長一段時間內留在工作人員名單中。這可能是爲什麼在resque代碼中有a comment,它警告resque:workers只能用於開發模式。