Heroku failing to start my node app because its tr

2019-04-27 17:52发布

问题:

I'm deploying my node app to Heroku and it's trying to invoke it with nodemon rather than the node app.js I have defined. My Procfile looks like this:

web: npm start

And when I push to heroku the dyno crashes with this error:

2014-03-24T19:24:59.669412+00:00 app[web.1]: > my-app@0.0.1 start /app
2014-03-24T19:24:59.669412+00:00 app[web.1]: > nodemon app.js
2014-03-24T19:24:59.669412+00:00 app[web.1]:
2014-03-24T19:24:59.669412+00:00 app[web.1]:
2014-03-24T19:24:59.710228+00:00 app[web.1]:
2014-03-24T19:24:59.701246+00:00 app[web.1]: sh: nodemon: not found

I even tried npm installing nodemon as a package.json dependency, and checking in node_modules/nodemon but no luck. (nodemon needs to be installed with npm install nodemon -g for that to work anyway)

Any ideas?

My package.json:

{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "main": "app.js",
    "scripts": {
        "start": "node app.js"
    },
    "dependencies": {
        "requirejs": "~2.1.10",
        "underscore": "~1.5.2",
        "express": "~3.4.8",
        "ejs": "~0.8.5",
        "less-middleware": "~0.1.15",
        "socket.io": "~0.9.16",
        "tail": "~0.3.5",
        "async": "~0.2.10",
        "mongoose": "~3.8.5",
        "mkdirp": "~0.3.5",
        "ejs-locals": "~1.0.2",
        "aws-sdk": "~2.0.0-rc8",
        "knox": "~0.8.8",
        "connect-multiparty": "~1.0.3",
        "uuid": "~1.4.1",
        "nodemon": "~1.0.14"
    },
    "devDependencies": {
        "grunt": "~0.4.2",
        "grunt-contrib-clean": "~0.5.0",
        "grunt-contrib-copy": "~0.4.1",
        "grunt-contrib-requirejs": "~0.4.1",
        "grunt-recess": "~0.5.0",
        "grunt-contrib-cssmin": "~0.7.0",
        "grunt-mocha-test": "~0.9.0",
        "grunt-forever": "~0.4.1",
        "matchdep": "~0.3.0",
        "jshint": "~2.4.3",
        "precommit-hook": "~0.3.10",
        "mocha": "~1.17.1",
        "supertest": "~0.9.0",
        "chai": "~1.9.0",
        "sinon": "~1.8.2",
        "karma-sinon": "~1.0.2",
        "karma-script-launcher": "~0.1.0",
        "karma-chrome-launcher": "~0.1.2",
        "karma-firefox-launcher": "~0.1.3",
        "karma-requirejs": "~0.2.1",
        "karma-html2js-preprocessor": "~0.1.0",
        "karma-jasmine": "~0.1.5",
        "karma-coffee-preprocessor": "~0.1.3",
        "karma-phantomjs-launcher": "~0.1.2",
        "karma": "~0.10.9",
        "karma-mocha": "~0.1.1",
        "grunt-karma": "~0.6.2",
        "karma-chai": "~0.1.0"
    },
    "config": {
        "precommit": {
            "lint": true
        }
    },
    "engines": {
        "node": "0.10.x"
    }
}

Update

Sorry to have left everyone hanging all this time! If I remember correctly my issue in the end was my buildpack which was overriding the web: role in my Procfile.

I've since switched to different buildpacks, namely: ddollar/heroku-buildpack-multi

With the following .buildpacks file:

ryandotsmith/nginx-buildpack
heroku/heroku-buildpack-nodejs

And my Procfile looks like this:

web: bin/start-nginx ./node_modules/.bin/forever --minUptime 10000 --spinSleepTime 1000 app.js

回答1:

Change your Procfile to this:

web: node app.js

Being app.js the entry point to your app.

This is assuming you don't really need nodemon in your app, since you have listed it at the package.json sample you provided.



回答2:

I know that OP got the answer but I thought I might share what worked for me, in a slightly different senario:

Procfile contains the following:

web: npm start

And for my package.json file I defined:

"scripts":{
    "start": "node ./bin/www"
}

And that fixed this issue for me.