6
votes

I am trying to deploy my node.js app to heroku but when I try to launch it locally using foreman I am getting Error: listen EADDRINUSE. I have run a netstat and grepped for the port nothing else is using it and the server starts without issue when running directly as a node http server.

The app I am trying to deploy is using mongo and redis I am not sure if these components will effect the server starting with Foreman. Does anyone have any suggestions on areas I could look at for potential bugs?

foreman start
01:37:18 web.1  | started with pid 1835
01:37:18 web.1  | /usr/local/foreman/lib/foreman/process.rb:66: warning: Insecure world writable dir /usr/local in PATH, mode 040777
01:37:19 web.1  | events.js:72
01:37:19 web.1  |         throw er; // Unhandled 'error' event
01:37:19 web.1  |               ^
01:37:19 web.1  | Error: listen EADDRINUSE
01:37:19 web.1  |     at errnoException (net.js:863:11)
01:37:19 web.1  |     at Server._listen2 (net.js:1008:14)
01:37:19 web.1  |     at listen (net.js:1030:10)
01:37:19 web.1  |     at Server.listen (net.js:1096:5)
01:37:19 web.1  |     at Function.app.listen (/Users/craig/Documents/Sandboxes   /xxx/node_modules/express/lib/application.js:535:24)
01:37:19 web.1  |     at Object.<anonymous> (/Users/craig/Documents/Sandboxes/xxx/web.js:25:5)
01:37:19 web.1  |     at Module._compile (module.js:456:26)
01:37:19 web.1  |     at Object.Module._extensions..js (module.js:474:10)
01:37:19 web.1  |     at Module.load (module.js:356:32)
01:37:19 web.1  |     at Function.Module._load (module.js:312:12)
01:37:19 web.1  | exited with code 8
01:37:19 system | sending SIGTERM to all processes
SIGTERM received

Thanks.

--Additional information--

The procfile just has one entry: web: node web.js

and I have set the listener up as follows:

var port = process.env.PORT || 5000;
app.listen(port, function() {
    console.log("Listening on " + port);
});
2
Are you trying to start your HTTP server on an specific port? (note that you should use process.env.PORT as the port number whenever you want to start an HTTP server on heroku)fardjad
Please post your Procfile and node.ks app configWinfield
Please find the additional details requested above in the original postCraig
i'm having the same issue. did you ever figure this out?Andrew Young

2 Answers

7
votes

I just ran into this on OS X. It looks like foreman picks port 5000 by default, which seems to conflict with Bonjour/mDNS/UPNP services. (From what I've read. I haven't taken the time to pick out which it is.)

However, you can change the port that foreman uses in two ways: specify the port on the command line or create a .foreman file with the port number specified there.

Good luck and happy coding!

2
votes

I had the same issue, Error: listen EADDRINUSE means that a Node server is already running.

Check that you are not running a Node server for the same project locally. If you are working on a GitHub synced project locally (on port 5000 for instance) which is tied to Heroku you cannot run a local Node server for that project as the port will be in use twice.

I was actually running a Node server on a project in a different Terminal window and didn't notice immediately.