Здесь происходит несколько вещей.
Конфигурирование из среды
Есть два основных преимущества для конфигурирования приложения из среды :
- Это делает конфигурацию специфичной для конкретной среды, например, чтобы вы могли использовать в разработке разные базы данных, почтовые серверы и т. Д., Отличные от тех, которые вы используете в рабочей среде
- Это позволяет хранить конфиденциальные значения, такие как ключи 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
.