我正在开发heroku上的node.js应用程序。现在它可以在单个(免费)dyno上运行。
由于某种原因突然我的应用程序崩溃了,现在它一直崩溃(我在添加NewRelic和Librato插件后观察它 - 应用程序在添加这些插件时重新启动) - 应用程序在其中一个插件后首次崩溃添加。所以我删除了两个插件,但问题仍然存在。我想检查什么是错的,我评论了我的应用程序代码,并将其替换为来自网络的简单示例:
index.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(process.env.PORT);
console.log('Server running at http://127.0.0.1:1337/');
Procfile
web: node index.js
packages.json中的引擎(由heroku安装的节点为0.10.26)
"engines": {
"node": "0.10.x"
},
此代码适用于我的电脑(使用工头测试)。 当我尝试将其部署到heroku应用程序崩溃时 - 这是日志:
2014-04-25T09:43:42+00:00 heroku[slug-compiler]: Slug compilation started
2014-04-25T09:43:47.850609+00:00 heroku[api]: Release v30 created by xxx
2014-04-25T09:43:47.850538+00:00 heroku[api]: Deploy 562babb by xxx
2014-04-25T09:43:47+00:00 heroku[slug-compiler]: Slug compilation finished
2014-04-25T09:43:48.588089+00:00 heroku[web.1]: State changed from crashed to starting
2014-04-25T09:43:55.655057+00:00 heroku[web.1]: Starting process with command `node index.js`
2014-04-25T09:43:57.931274+00:00 heroku[web.1]: Process exited with status 8
2014-04-25T09:43:57.945393+00:00 heroku[web.1]: State changed from starting to crashed
当我尝试heroku restart
时:
2014-04-25T09:44:43.071357+00:00 heroku[web.1]: State changed from crashed to starting
2014-04-25T09:44:51.834860+00:00 heroku[web.1]: Starting process with command `node index.js`
2014-04-25T09:44:54.250631+00:00 heroku[web.1]: State changed from starting to crashed
2014-04-25T09:44:54.235545+00:00 heroku[web.1]: Process exited with status 8
这让我很疯狂 - 我将许多节点应用程序部署到heroku,这些应用程序正在生产中运行,并且从未出现过这样的问题 - 最新情况如何?
当我将节点引擎版本更改为0.10.20
(我正在使用此v localy)时,应用程序已启动且正在运行但当我heroku restart
时它再次崩溃...
State changed from up to starting
2014-04-25T10:10:12.990317+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2014-04-25T10:10:15.145758+00:00 heroku[web.1]: Process exited with status 143
2014-04-25T10:10:16.151380+00:00 heroku[web.1]: Starting process with command `node index.js`
2014-04-25T10:10:18.905637+00:00 heroku[web.1]: Process exited with status 8
2014-04-25T10:10:18.929730+00:00 heroku[web.1]: State changed from starting to crashed
第二次重新启动应用程序后up
再次运行,第三次重启后再次崩溃(它总是崩溃/退出状态为8)。
答案 0 :(得分:2)
问题可能在于Heroku本身。大约一小时前发生了一个事故报告,但目前还不清楚导致问题的原因: https://status.heroku.com/incidents/614
与此同时,您可能希望通过HerokuDashboard回滚到应用程序的上一个工作版本。
答案 1 :(得分:1)
问题是您正在尝试启动无效端口。 Heroku没有在环境中设置PORT变量(如果你运行heroku config
,你可以看到这一点)。您的PORT变量必须明确地在Procfile中使用。
你应该在你的Procfile中做这样的事情:
web: node index.js $PORT
然后修改index.js代码,说:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(process.argv[2]);
console.log('Server running at http://127.0.0.1:' + process.argv[2]);
答案 2 :(得分:0)
将此配置添加到package.json:
"scripts": {
"start": "node index.js"},
index.js是您要从此处启动应用程序的文件的名称,例如www.js或server.js