Ошибка R10 при развертывании API с помощью AdonisJS на Heroku - PullRequest
0 голосов
/ 28 марта 2019

Вот ошибка:

Ошибка R10 (Тайм-аут загрузки) -> Веб-процессу не удалось привязаться к $ PORT в течение 60 секунд после запуска

Анализ журналаЯ заметил, что каждый раз, когда я «запускаю» приложение на Heroku, оно направляется на другой порт.

Я уже сталкивался с многочисленными примерами того, как решить эту проблему, но с использованием Express, а не с помощью AdonisJS (который яя нахожу очень ограниченным).

Другая проблема, с которой я сталкиваюсь - это использование домена для моего приложения, должно ли оно быть таким же, как у Heroku или localhost (127.0.0.1)?

Myжурнал:

2019-03-28T12:54:19.688098+00:00 app[web.1]: info: serving app on http://127.0.0.1:48470
2019-03-28T12:55:17.075091+00:00 heroku[web.1]: State changed from starting to crashed
2019-03-28T12:55:17.081028+00:00 heroku[web.1]: State changed from crashed to starting
2019-03-28T12:55:16.883066+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-03-28T12:55:16.883174+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-03-28T12:55:17.056876+00:00 heroku[web.1]: Process exited with status 137
2019-03-28T12:55:20.176409+00:00 heroku[web.1]: Starting process with command `ENV_SILENT=true npm start`
2019-03-28T12:55:22.553527+00:00 app[web.1]: 
2019-03-28T12:55:22.553548+00:00 app[web.1]: > adonis-api-app@4.1.0 start /app
2019-03-28T12:55:22.553551+00:00 app[web.1]: > node server.js
2019-03-28T12:55:22.553552+00:00 app[web.1]: 
2019-03-28T12:55:23.598805+00:00 app[web.1]: info: serving app on http://127.0.0.1:37943
2019-03-28T12:56:20.763929+00:00 heroku[web.1]: State changed from starting to crashed
2019-03-28T12:56:20.660053+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-03-28T12:56:20.660202+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-03-28T12:56:20.747895+00:00 heroku[web.1]: Process exited with status 137
2019-03-28T12:56:23.940320+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=***** protocol=https
2019-03-28T13:21:40.085858+00:00 heroku[web.1]: State changed from crashed to starting
2019-03-28T13:21:43.920685+00:00 heroku[web.1]: Starting process with command `ENV_SILENT=true npm start`
2019-03-28T13:21:46.419408+00:00 app[web.1]: 
2019-03-28T13:21:46.419429+00:00 app[web.1]: > adonis-api-app@4.1.0 start /app
2019-03-28T13:21:46.419431+00:00 app[web.1]: > node server.js
2019-03-28T13:21:46.419433+00:00 app[web.1]: 
2019-03-28T13:21:47.899057+00:00 app[web.1]: info: serving app on http://127.0.0.1:51104

Мой .env файл:

HOST=127.0.0.1
PORT=8080
NODE_ENV=development
APP_NAME=AdonisJs
APP_URL=https://${HOST}:${PORT}
APP_KEY=*******

Как предотвратить изменение порта?

1 Ответ

1 голос
/ 28 марта 2019

Здесь происходит несколько вещей.

Конфигурирование из среды

Есть два основных преимущества для конфигурирования приложения из среды :

  • Это делает конфигурацию специфичной для конкретной среды, например, чтобы вы могли использовать в разработке разные базы данных, почтовые серверы и т. Д., Отличные от тех, которые вы используете в рабочей среде
  • Это позволяет хранить конфиденциальные значения, такие как ключи APIи пароли из вашей кодовой базы

Включение файла .env в ваш репозиторий сводит на нет оба эти преимущества.Его можно использовать в разработке, и это может быть удобным способом установки переменных среды, но его не следует фиксировать в вашем хранилище или использовать в Heroku.

Heroku изначально поддерживает настройку изокружающая среда .Вы можете установить переменные в веб-интерфейсе или через heroku:config в командной строке.Именно здесь ваши переменные окружения должны работать.

I настоятельно настоятельно рекомендует вам удалить файл .env из вашего хранилища с помощью

git rm --cached .env

и добавить его вваш .gitignore и используйте вместо этого конфигурацию Heroku, основанную на окружающей среде.Вам также следует сделать недействительными любые ключи API или пароли, содержащиеся в этом файле, и сгенерировать новые.

Что бы это ни стоило, документация AdonisJS согласуется с этим подходом :

Файл .env никогда не должен передаваться на ваш контроль версий или передаваться другим людям.

Различные порты

Это вполне ожидаемо :

В Heroku приложения полностью автономны и не полагаютсяво время выполнения внедрения веб-сервера в среду выполнения для создания веб-службы.Каждый веб-процесс просто привязывается к порту и прослушивает запросы, поступающие на этот порт.Порт для привязки к назначается Heroku в качестве переменной среды PORT.

Heroku сообщает вам, к какому порту подключаться через переменную среды PORT, и выдолжен использовать это.Но это не тот порт, который будет виден снаружи;стандартные порты HTTP будут перенаправлены на ваше приложение автоматически.

IP-адреса

Ваше приложение должно прослушивать все IP-адреса.Если вы используете Express, я думаю, это означает, что вы не предоставляете IP-адрес в своем вызове .listen().Вы должны указать только порт, а этот порт должен быть из переменной среды PORT.

...