#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
автоматически.