将网站部署到Heroku时出现应用程序错误

时间:2020-09-27 23:33:38

标签: 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);
  });
});

我的环境变量,例如DATABASEDATABASE_PASSWORD设置在名为config.env的文件中,由于我的.gitignore包含敏感信息,因此该文件被忽略。

1 个答案:

答案 0 :(得分:0)

您的config.env文件确实应该被忽略。不应提交诸如数据库凭据之类的敏感信息。

但是,您的应用程序需要这些值。在Heroku上,解决方案是将config vars设置为环境变量来暴露给您的应用程序。您可以使用Heroku CLI进行此操作,例如

heroku config:set DATABASE_PASSWORD=12345

或通过网络仪表板。

请注意,在大多数情况下,您不应该在Heroku上手动设置数据库凭据。使用database addon和任何设置变量 it 设置,例如Heroku Postgres服务会自动设置一个名为DATABASE_URL的变量。