簡體   English   中英

Node.JS永遠在Heroku上

[英]Node.JS with forever on Heroku

所以,我需要在heroku上運行我的node.js應用程序,它運行得很好,但是當我的應用程序崩潰時,我需要重新啟動它,所以我永遠添加到package.json,並創建了一個名為forever.js的文件這個:

var forever = require('forever');

var child = new (forever.Monitor)('web.js', {
  max: 3,
  silent: false,
  options: []
});

//child.on('exit', this.callback);
child.start();

forever.startServer(child);

在我的Procfile(heroku用來知道要開始什么)我把:

web: node forever.js

好的! 現在,每當我的應用程序崩潰時,它會自動重啟,但是,不時(幾乎每1小時),heroku開始拋出H99 - 平台錯誤,並且關於這個錯誤,他們說:

與需要您糾正的所有其他錯誤不同,此錯誤不需要您采取任何操作。 請稍后再試,或查看狀態網站。

但我只是手動重新啟動我的應用程序,錯誤就消失了,如果我不這樣做,它可能需要幾個小時才能自行消失。

有人能幫我一下嗎? 也許這是一個永遠的問題? 一個heroku問題?

這是免費Heroku帳戶的問題:Heroku會在1小時不活動后自動殺死未付費的應用,然后在下次請求時將其旋轉回來。(如下所述,這不適用於付費帳戶。如果您擴展最多兩個服務器並為第二個服務器付費,您將獲得兩個永遠在線的服務器。) - https://devcenter.heroku.com/articles/dynos#dyno-sleeping

這種行為可能forever不會很好地發揮作用。 要確認這一點,運行heroku logs並查找“空閑”和“使用SIGTERM停止進程”行,然后查看接下來的內容。

您可能希望嘗試使用Cluster API並在每次死亡時自動創建一個新子項,而不是forever使用。 http://nodejs.org/api/cluster.html#cluster_cluster就是一個很好的例子,你只需將代碼放入else塊即可。

結果是您的應用程序現在更穩定,而且它可以使用所有可用的CPU核心(根據我的經驗,4)。

缺點是你不能將任何狀態存儲在內存中。 如果您需要存儲會話或其他內容,請嘗試免費的Redis To Go插件( heroku addons:add redistogo )。

這是一個使用cluster和Redis To Go在heroku上運行的示例: https//github.com/nfriedly/node-unblocker

更新:Heroku最近對免費應用程序的工作方式進行了一些重大更改,最重要的是它們每天最多只能在線工作18小時,這使得它無法像“真正的”Web服務器那樣無法使用。 詳情請訪問https://blog.heroku.com/archives/2015/5/7/heroku-free-dynos

更新2:他們再次改變它。 現在,如果你驗證你的ID,你可以經常運行1個免費的dyno: https//blog.heroku.com/announcing_heroku_free_ssl_beta_and_flexible_dyno_hours#flexible-free-dyno-hours

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM