Web dynos keep crashing while trying to deploy my first node.js app to Heroku-Collection of common programming errors

$ foreman start

creates a link with my working app I have a file Called Procfile that contains:

web: node server.js

Here is my package.json

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

So I go to start the “dynos” with

 $ 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)

a little later

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

Any ideas on where I go from here?

EDIT: Here are some logs

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

Now I get this similar error.

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
  1. I can’t be sure without the Node code where you create the server, however from the logs it looks like you are not listening on the correct port.

    Heroku assigns your application a port (which is set as the “PORT” environment variable) that your application must listen on. If you do not connect to this port within 60s, it will kill your app, and this seems to be what is happening.

    UPDATE: In fact, based on your web.1 log entry, it looks like you are trying to listen on port 8080. I think it is highly unlikely that this is the port provided by Heroku. You can get the port Heroku provides from process.env.PORT, and then listen on that.

  2. try looking in your dashboard check that you have at least one Dynos. It’s happen to me that I add more than one app and I use the free trail so it keep moving the Dyno between the app.

    Good Luck.