工头开始挂起

时间:2015-07-25 21:32:47

标签: node.js heroku express foreman heroku-toolbelt

我试图制作一个快速(当前正在工作)的应用程序来使用foreman start

这是我的Procfile

web: node ./bin/www

这是我的www文件:

#!/usr/bin/env node
var debug = require('debug')('quiz');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

这是我的package.json

{
  "name": "quiz",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "engines": {
    "node": "0.10.x",
    "npm": "1.4.x"
  },
  "devDependencies": {
    "sqlite3": "^3.0.8"
  },
  "dependencies": {
    "body-parser": "~1.8.1",
    "cookie-parser": "~1.3.3",
    "debug": "~2.0.0",
    "ejs": "~0.8.5",
    "express": "~4.9.0",
    "express-partials": "^0.3.0",
    "morgan": "~1.3.0",
    "pg": "^4.1.1",
    "pg-hstore": "^2.3.2",
    "sequelize": "^1.7.0",
    "serve-favicon": "~2.1.3"
  }
}

当我在日志中运行foreman start时,一切正常:

23:17:21 web.1  | started with pid 1632

当我在浏览器中测试时,请求显示在日志中,但没有任何内容到达浏览器。

当我尝试浏览http://localhost:5000/时,这是de log:

23:20:56 web.1  | ←[0mGET / ←[32m200 ←[0m25.741 ms - 1404←[0m
23:20:56 web.1  | ←[0mGET /stylesheets/style.css ←[36m304 ←[0m5.098 ms - -←[0m
23:20:56 web.1  | ←[0mGET /stylesheets/wide.css ←[36m304 ←[0m4.419 ms - -←[0m

请求似乎已解决,但浏览器会无限期地等待响应。最后,浏览器显示ERR_EMPTY_RESPONSE。

我尝试使用相同的结果制作其他任意请求:

23:23:08 web.1  | ←[0mGET /author ←[32m- ←[0m- ms - -←[0m
23:23:08 web.1  | ←[0mGET /stylesheets/smartphone.css ←[32m- ←[0m- ms - -←[0m
23:25:59 web.1  | ←[0mGET /author ←[32m- ←[0m- ms - -←[0m
23:28:00 web.1  | ←[0mGET /author ←[32m- ←[0m- ms - -←[0m
23:30:00 web.1  | ←[0mGET /author ←[32m- ←[0m- ms - -←[0m

我知道如何调试这个以便了解发生了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

Heroku no longer supports foreman所以最好的办法是尝试使用他们推荐的工头替代方法:heroku命令“local”。

实施是微不足道的:

  • 下载并安装最新版本的heroku toolbelt(不再包括工头)。

  • 而不是使用foreman start使用heroku local

有关heroku local的完整详情,请参阅heroku的网站。

虽然你没有提到它,但是你得到那些ERR_EMPTY_RESPONSE消息的原因是因为工头在处理请求时死了(而不是“挂起”)?在工头将“向所有进程发送SIGKILL”消息记录到控制台并终止之后,我遇到了一些样式表的问题。无论如何,当我使用heroku local代替foreman start时,我的问题就消失了。

即使heroku local也失败了,这应该成为解决问题的问题,而不是当前与领班的问题。