Форман старт зависает

Я пытаюсь сделать экспресс-приложение (в настоящее время работающее) для работы с 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/:

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

Любая идея о том, как я могу отладить это, чтобы понять, что происходит?

Заранее спасибо.


person Carlos    schedule 25.07.2015    source источник
comment
Изначально вы сказали app.set('port', process.env.PORT || 3000);, но ниже вы сказали http://localhost:5000/ — вы обращаетесь к серверу через правильный порт?   -  person hunterloftis    schedule 26.07.2015
comment
Прежде чем добавить конфигурацию мастера, я запустил ее с помощью npm start. Таким образом все работает нормально. Но после настройки запуска с помощью мастера запуска он прослушивает порт 5000.   -  person Carlos    schedule 26.07.2015
comment
Я говорю, что вы сначала устанавливаете порт 3000, а затем открываете 5000. Как выглядит ваша фактическая команда .listen для выражения? Использует ли он значение port или какое-то другое значение?   -  person hunterloftis    schedule 26.07.2015
comment
Форман прослушивает порт, указанный в переменной env $PORT. Я изменил его в своем файле .env, добавив строку с PORT=3000. Теперь он слушает на 3000. Я попробовал еще раз (теперь на http:\\localhost:3000) с тем же результатом :(   -  person Carlos    schedule 26.07.2015


Ответы (1)


Heroku больше не поддерживает бригадира, поэтому лучше всего попробовать использовать их рекомендуемую альтернативу бригадиру. вместо этого: команда heroku "local".

Реализация тривиальна:

  • Загрузите и установите последнюю версию heroku toolbelt (в которую больше не входит Foreman).

  • Вместо использования foreman start используйте heroku local.

Полную информацию о heroku local см. на веб-сайте heroku.

Хотя вы не упоминаете об этом, возможно ли, что причина, по которой вы получаете эти сообщения ERR_EMPTY_RESPONSE, заключается в том, что мастер умер (а не «завис») при обработке запроса? У меня была такая же проблема с некоторыми таблицами стилей после того, как мастер зарегистрировал сообщение «отправка SIGKILL всем процессам» на консоль и завершил работу. Тем не менее, мои проблемы исчезли, когда я использовал heroku local вместо foreman start.

И даже если heroku local тоже потерпит неудачу, это должно стать проблемой, которую нужно решить, а не ваша текущая проблема с бригадиром.

person skomisa    schedule 30.08.2015
comment
В конце концов я перешел на среду разработки Linux. С тех пор у меня все работает нормально. В любом случае, спасибо за ваш ответ. Я буду использовать «heroku local» для будущих разработок. - person Carlos; 31.08.2015