在试图将我的第一个node.js应用程序部署到Heroku时,Web dynos不断崩溃

$ foreman start 

创build一个与我的工作应用程序的链接我有一个名为Procfile的文件,其中包含:

 web: node server.js 

这是我的package.json

 { "name": "node-example", "version": "0.0.1", "dependencies": { "express": "3.1.0", "jade": "*", "socket.io": "*", "underscore": "*" } } 

所以我开始与“dynos”

  $ heroku ps:scale web=1 Scaling web dynos... done, now running 1 $ heroku ps === web (1X): `node server.js` web.1: restarting 2013/09/27 22:10:44 (~ 34s ago) 

一会儿

 $ heroku ps === web (1X): `node server.js` web.1: crashed 2013/09/27 22:11:49 (~ 10s ago) 

关于我从哪里出发的任何想法?

编辑:这里有一些日志

 2013-09-27T12:10:47.177359+00:00 heroku[web.1]: Starting process with command `node server.js` 2013-09-27T12:10:48.381526+00:00 app[web.1]: Server up and running. Go to http://127.0.0.1:8080 2013-09-27T12:10:48.342939+00:00 app[web.1]: info: socket.io started 2013-09-27T12:11:48.499022+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2013-09-27T12:11:48.499325+00:00 heroku[web.1]: Stopping process with SIGKILL 2013-09-27T12:11:49.656186+00:00 heroku[web.1]: State changed from starting to crashed 2013-09-27T12:11:49.643225+00:00 heroku[web.1]: Process exited with status 137 

EDI:server.js

 var portx = process.env.PORT; // This is my addition var express = require("express") , app = express() , http = require("http").createServer(app) , io = require("socket.io").listen(http) , _ = require("underscore"); var participants = [] app.set("ipaddr", "127.0.0.1"); app.set("port", portx); // to here app.set("views", __dirname + "/views"); app.set("view engine", "jade"); app.use(express.static("public", __dirname + "/public")); app.use(express.bodyParser()); app.get("/", function(request, response) { response.render("index"); }); app.post("/message", function(request, response) { var message = request.body.message; if(_.isUndefined(message) || _.isEmpty(message.trim())) { return response.json(400, {error: "Message is invalid"}); } var name = request.body.name; io.sockets.emit("incomingMessage", {message: message, name: name}); response.json(200, {message: "Message received"}); }); io.on("connection", function(socket){ socket.on("newUser", function(data) { participants.push({id: data.id, name: data.name}); io.sockets.emit("newConnection", {participants: participants}); }); socket.on("nameChange", function(data) { _.findWhere(participants, {id: socket.id}).name = data.name; io.sockets.emit("nameChanged", {id: data.id, name: data.name}); }); socket.on("disconnect", function() { participants = _.without(participants,_.findWhere(participants, {id: socket.id})); io.sockets.emit("userDisconnected", {id: socket.id, sender:"system"}); }); }); http.listen(app.get("port"), app.get("ipaddr"), function() { console.log("Server up and running. Go to http://" + app.get("ipaddr") + ":" + app.get("port")); }); 

现在我得到这个类似的错误。

 2013-09-28T02:38:51.301568+00:00 app[web.1]: info: socket.io started 2013-09-28T02:38:51.363825+00:00 app[web.1]: Server up and running. Go to http://127.0.0.1:31707 2013-09-28T02:39:50.974347+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 2013-09-28T02:39:50.974557+00:00 heroku[web.1]: Stopping process with SIGKILL 2013-09-28T02:39:52.927176+00:00 heroku[web.1]: Process exited with status 137 2013-09-28T02:39:52.945829+00:00 heroku[web.1]: State changed from starting to crashed 

我不能确定没有创build服务器的节点代码,但是从日志看来,您不在正确的端口上侦听。

Heroku为您的应用程序分配一个您的应用程序必须监听的端口(设置为“PORT”环境variables)。 如果你在60多岁的时候没有连接到这个端口,它会杀死你的应用程序,这似乎是发生了什么事情。

更新:事实上,根据您的web.1日志条目,它看起来像你试图监听端口8080.我认为这是极不可能的,这是由Heroku提供的端口。 您可以从process.env.PORT获取Heroku提供的端口,然后在其上进行监听。

尝试在仪表板中查看是否至less有一个Dynos。 这发生在我身上,我添加了多个应用程序,我使用免费的跟踪,所以它不断移动应用程序之间的Dyno。

祝你好运。