2014-01-08 35 views
1

我有一個主從應用程序。 本地在我的電腦上,一切正常:當一個奴隸由於 process.exit(0)而死亡時,我叉,它繼續。當羣集結束時,「狀態從變爲崩潰」。它應該叉()

我抓住它,

cluster.on('exit', function(worker, code, signal) { 
    if(code == 0){ 
     cluster.fork(); 
    } 
}); 

可悲的是在Heroku上,只要從執行process.exit(0)的"State changed from up to crashed"

任何想法繞過Heroku的保障?

+1

當測功機崩潰時,您需要發佈您的應用程序代碼,Procfile以及所有日誌消息。這段代碼看起來是正確的,所以其他事情一定會發生。 – Winfield

+0

請發佈日誌和procfile。不要繞開防護措施,你必須嘗試找到根本原因。 – user568109

回答

4

Heroku dynos是一個虛擬應用程序容器,它使用構建包中所需的二進制文件構建,並與應用程序代碼的發行版結合使用。此應用容器的唯一工作是運行由您的Procfile描述的流程。

如果該過程意外終止,Heroku認爲dyno崩潰並嘗試重新啓動該過程。另外,如果應用程序在60秒內未綁定到指定的PORT,則測試儀將會崩潰。

如果您的後端工作進程在啓動process.exit(0)之前未綁定到端口,它們將永遠不會監聽端口。如果在超時時間內dyno沒有綁定到端口,Heroku會認爲它崩潰了。

我的猜測是,您立即退出每個子工作進程,導致主分叉N孩子,然後重新分叉每一個,直到引導超時被擊中。

相關問題