Ошибка приложения при развертывании веб-сайта в Heroku

#node.js #heroku

#node.js #heroku

Вопрос:

При первом развертывании веб-сайта я получил длинную ошибку, как показано ниже.

 2020-09-25T07:31:36.727714 00:00 heroku[web.1]: State changed from starting to crashed
2020-09-25T07:31:36.730015 00:00 heroku[web.1]: State changed from crashed to starting
2020-09-25T07:31:40.230036 00:00 heroku[web.1]: Starting process with command `node server.js`
2020-09-25T07:31:43.021415 00:00 heroku[web.1]: Process exited with status 1
2020-09-25T07:31:43.061920 00:00 heroku[web.1]: State changed from starting to crashed
2020-09-25T07:31:44.106774 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=secure-coast-24568.herokuapp.com request_id=3ba32d6b-e60d-4566-8a67-bf06d6957146 fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
2020-09-25T07:31:44.535220 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=secure-coast-24568.herokuapp.com request_id=2e8669b0-19cb-43aa-90c8-1e1770aa3e6a fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
2020-09-25T07:36:38.651280 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=secure-coast-24568.herokuapp.com request_id=0d39c46b-d0d8-4bfb-9516-1c8fae89dce6 fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
2020-09-25T07:36:39.102621 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=secure-coast-24568.herokuapp.com request_id=9b23f6b1-e2ec-4f12-8b25-cb000a229675 fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
2020-09-25T07:48:16.835509 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=secure-coast-24568.herokuapp.com request_id=956d30e4-a981-48fd-9ec9-2598975d3e1d fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
2020-09-25T07:48:17.345353 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=secure-coast-24568.herokuapp.com request_id=35947874-9055-4b74-ab76-31c4329e0c72 fwd="116.88.43.115" dyno= connect= service= status=503 bytes= protocol=https
  

Я не уверен, в чем причина проблемы, но многие другие тоже получали те же ошибки, которые были исправлены. Пройдя через то, что они сделали, чтобы устранить проблему, я выполнил шаги, но все равно получил ту же ошибку. В настоящее время веб-сайт работает на 100% при локальном использовании, и я провел несколько тестов перед его развертыванием.

Это мой server.js

 const dotenv = require("dotenv");

const mongoose = require("mongoose");

const app = require("./app");

app.set("view engine", "ejs");

process.on("uncaughtException", () => {
  process.exit(1);
});

dotenv.config({
  path: "./config.env",
});

const DB = process.env.DATABASE.replace(
  "<PASSWORD>",
  process.env.DATABASE_PASSWORD
);

mongoose
  .connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log("Success");
  });

// Server

const port = process.env.PORT || "3000";

const server = app.listen(port, () => {
  console.log("Server started");
});

// Handle all the errors in the async code that wasnt handle

process.on("unhandledRejection", () => {
  server.close(() => {
    process.exit(1);
  });
});  

Мои переменные среды, например DATABASE , and DATABASE_PASSWORD , устанавливаются в вызываемом файле config.env , который игнорируется через my .gitignore , поскольку он содержит конфиденциальную информацию.

Комментарии:

1. Эти ошибки мало что нам говорят. Можете ли вы показать нам свой server.js ?

2. @Chris вот так.

3. Я не вижу вашего сообщения «Сервер запущен» в журналах. Вы уверены, что ваши учетные данные базы данных верны? У вас есть DATABASE переменная среды и DATABASE_PASSWORD ? Откуда они берутся? Рассмотрите возможность добавления дополнительных выходных данных журнала в этот скрипт.

4. @Chris да, эта информация хранится в файле config.env, который игнорируется в файле .gitignore, поскольку я не хотел бы, чтобы конфиденциальные данные хранились в моем репозитории. Запись выходных данных в этот скрипт?

Ответ №1:

Ваш config.env файл действительно должен быть проигнорирован. Конфиденциальная информация, такая как учетные данные вашей базы данных, не должна передаваться.

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

 heroku config:set DATABASE_PASSWORD=12345
  

или через веб-панель управления.

Обратите внимание, что в большинстве случаев вам не следует устанавливать учетные данные базы данных вручную в Heroku. Используйте дополнение к базе данных и любые заданные им переменные конфигурации, например, служба Heroku Postgres устанавливает переменную, вызываемую DATABASE_URL автоматически.