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

在尝试将我的第一个node.js应用程序部署到Heroku时,Web dynos不断崩溃,node.js,heroku,Node.js,Heroku,创建与我的工作应用程序的链接 我有一个名为Procfile的文件,其中包含: $ foreman start 这是我的package.json web: node server.js 所以我开始用 稍晚 $ 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:

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

$ foreman start
这是我的package.json

web: node server.js
所以我开始用

稍晚

 $ 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)
EDI:server.js

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
现在我得到了类似的错误

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"));
});

如果没有创建服务器的节点代码,我无法确定,但是从日志来看,您似乎没有在正确的端口上侦听

Heroku为应用程序分配一个应用程序必须侦听的端口(设置为“port”环境变量)。如果你在60秒内没有连接到这个端口,它将杀死你的应用程序,这似乎就是正在发生的事情

更新:
事实上,根据您的web.1日志条目,您似乎正在尝试侦听端口8080。我认为这不太可能是Heroku提供的港口。您可以从process.env.port获取Heroku提供的端口,然后监听该端口。

尝试查看仪表板,检查是否至少有一个Dynos。碰巧我添加了多个应用程序,并且我使用了免费路径,所以它会在应用程序之间不断移动Dyno


祝你好运。

谢谢。你是对的,我把端口设置为8080。我不知道Heroku提供了一个特定的端口。我对代码进行了更改,将8080替换为process.env.PORT。然后我做了一个$foreman开始,一切都很好,现在在端口5000,然后我推到Heroku。但一旦我启动dynos,我会得到同样的错误R10。我能问一下为什么你要给它一个特定的IP地址吗?因为这是一些教程告诉我要做的。嗯,我以前没见过。您是否尝试过不指定IP地址?
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