Heroku 无法启动我的节点应用程序,因为它试图用 nodemon 来做
Posted
技术标签:
【中文标题】Heroku 无法启动我的节点应用程序,因为它试图用 nodemon 来做【英文标题】:Heroku failing to start my node app because its trying to do it with nodemon 【发布时间】:2014-05-02 08:55:51 【问题描述】:我正在将我的节点应用程序部署到 Heroku,它试图使用 nodemon 而不是我定义的 node app.js
来调用它。我的 Procfile 看起来像这样:
web: npm start
当我推送到 heroku 时,测功机因以下错误而崩溃:
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
我什至尝试使用 npm 安装 nodemon 作为 package.json 依赖项,并签入 node_modules/nodemon 但没有运气。 (nodemon 需要与npm install nodemon -g
一起安装才能正常工作)
有什么想法吗?
我的 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"
更新
很抱歉让大家一直悬而未决!如果我没记错的话,最后我的问题是我的 buildpack 覆盖了 web: 在我的 Procfile 中的角色。
我已经切换到不同的构建包,即: ddollar/heroku-buildpack-multi
使用以下 .buildpacks 文件:
ryandotsmith/nginx-buildpack
heroku/heroku-buildpack-nodejs
我的 Procfile 看起来像这样:
web: bin/start-nginx ./node_modules/.bin/forever --minUptime 10000 --spinSleepTime 1000 app.js
【问题讨论】:
【参考方案1】:将 nodemon 作为开发依赖项而不是依赖项。
使用此命令删除 nodemon。
npm uninstall nodemon
现在安装 nodemon
npm install -D nodemon
在生产或部署中,您不应该使用 nodemon。
【讨论】:
【参考方案2】:最近我正在使用 nodemon 在 heroku 中部署我的 node js 应用程序,因为它工作正常。 我们必须按照几个步骤来解决找不到 nodemon 的问题。
1)Package.json
npm start: nodemon server.js
2)我们需要修改procfile,如下所示。
web: nodemon server.js
3)使用下面的命令行登录heroku
$ heroku login
4)创建新应用
$heroku create <appication-name>
我想大部分开发者都是通过 github Id 直接部署到 Heroku 的。本地 node_modules 工作正常,在 heroku 中部署您的应用程序后(内部我们无法访问 node_modules),因此我们可以访问存储库。
5)从heroku克隆存储库
$ heroku git:clone -a <application-name>
$ cd cv-application
现在我们可以访问应用程序了。
6) 删除你的 node_modules 并尝试使用以下命令安装包。
$ npm install.
部署您的更改。
$ git add .
$ git commit -am "make it better"
$ git push heroku master.
npm 版本应该是 6.4.1。
【讨论】:
【参考方案3】:我知道 OP 得到了答案,但我想我可能会以稍微不同的方式分享对我有用的方法:
Procfile 包含以下内容:
web: npm start
对于我定义的 package.json 文件:
"scripts":
"start": "node ./bin/www"
这为我解决了这个问题。
【讨论】:
如果应用程序崩溃,它会自动重启它吗,它肯定看起来不像【参考方案4】:将您的 Procfile
更改为:
web: node app.js
成为app.js
应用程序的入口点。
这是假设您的应用中并不真正需要 nodemon
,因为您已在您提供的 package.json
示例中列出了它。
【讨论】:
完成了,没有运气。我已经从 package.json 中删除了脚本和 nodemon dep,我的 Procfile 是这样的:web: node app.js
当我使用 heroku ps 时,我得到了这个:=== web (1X): `npm start` web.1: crashed 2014/03/24 16:18:05 (~ 1m ago)
我没有在任何地方提到 npm start 或 nodemon。它来自哪里?
等一下,我一直都知道我做错了什么,这与 heroku 无关。不过感谢您的帮助!
抱歉 @ndelvalle 我确实编辑了原始问题,并提供了有关问题和解决方案的详细信息。
@diosney 我也有同样的问题,你是怎么解决的?以上是关于Heroku 无法启动我的节点应用程序,因为它试图用 nodemon 来做的主要内容,如果未能解决你的问题,请参考以下文章
Heroku 节点 js 部署问题:Web 进程在启动后 60 秒内无法绑定到 $PORT
Heroku 无法加载我的 css 文件,因为它是 mimetype