I have attempted to put together a sample node.js app on Heroku basically as per their instructions here: https://devcenter.heroku.com/articles/nodejs
The app runs fine locally with foreman start
, however, each time I deploy the app it crashes. What am I doing wrong?
My Procfile
contains:
web: node web.js
My package.json
contains:
{
"name": "testapp",
"version": "0.0.1",
"engines": {
"node": "0.6.15"
, "npm": "1.1.9"
}
, "dependencies": {
"tower": "0.4.0-12"
}
}
My web.js
contains:
var express = require('express');
var app = express.createServer(express.logger());
app.get('/', function(request, response) {
response.send('Hello World!');
});
var port = process.env.PORT || 3000;
app.listen(port, function() {
console.log("Listening on " + port);
});
The app deploys and starts up, yet crashes each time. The log output I see from the app is:
2012-04-27T20:21:31+00:00 heroku[web.1]: State changed from created to starting
2012-04-27T20:21:37+00:00 heroku[web.1]: Starting process with command `node web.js`
2012-04-27T20:21:38+00:00 app[web.1]:
2012-04-27T20:21:38+00:00 app[web.1]: node.js:201
2012-04-27T20:21:38+00:00 app[web.1]: throw e; // process.nextTick error, or 'error' event on first tick
2012-04-27T20:21:38+00:00 app[web.1]: ^
2012-04-27T20:21:38+00:00 app[web.1]: Error: Cannot find module 'express'
2012-04-27T20:21:38+00:00 app[web.1]: at Function._resolveFilename (module.js:332:11)
2012-04-27T20:21:38+00:00 app[web.1]: at Function._load (module.js:279:25)
2012-04-27T20:21:38+00:00 app[web.1]: at Module.require (module.js:354:17)
2012-04-27T20:21:38+00:00 app[web.1]: at require (module.js:370:17)
2012-04-27T20:21:38+00:00 app[web.1]: at Object.<anonymous> (/app/web.js:1:77)
2012-04-27T20:21:38+00:00 app[web.1]: at Module._compile (module.js:441:26)
2012-04-27T20:21:38+00:00 app[web.1]: at Object..js (module.js:459:10)
2012-04-27T20:21:38+00:00 app[web.1]: at Module.load (module.js:348:31)
2012-04-27T20:21:38+00:00 app[web.1]: at Function._load (module.js:308:12)
2012-04-27T20:21:38+00:00 app[web.1]: at Array.0 (module.js:479:10)
2012-04-27T20:21:39+00:00 heroku[web.1]: Process exited with status 1
2012-04-27T20:21:40+00:00 heroku[web.1]: State changed from starting to crashed
2012-04-27T20:30:01+00:00 heroku[router]: Error H10 (App crashed) -> GET testapp.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
Heroku is a platform as a service (PaaS) that supports many languages. Initially, it supported only Ruby sites but now supports various languages, including JavaScript with Node. js. Heroku also has Docker support so that you can deploy just about anything to it.
"Application Error" or similar is always caused by your own application code. Routing errors will normally only surface themselves within the logs of your application. To track this kind of issue down you should look at your logs: $ heroku logs --tail --app your_app_name.
It appears you are requiring express in your web.js, so why you do not add express to your dependencies? Your local copy may have express installed already, that's why you are not getting any error. Tower may require express, however, you cannot directly access express from it, it is a submodule in tower's directories, not in your app directory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With