javascript - Heroku 与 Strapi,应用程序未使用生产数据库
问题描述
我已经将我的应用程序部署到 Heroku。它在访问时提供应用程序错误消息。
日志给了我这个:
[2021-02-15T01:04:05.882Z] debug ⛔️ Server wasn't able to start properly.
[2021-02-15T01:04:05.883Z] error Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16)
根据我的猜测,它试图使用本地数据库。我认为该应用程序没有使用位于 config/env/production 中的 database.js。该应用程序运行良好heroku local
。
下面是我为生产环境设置的 database.js:
const parse = require("pg-connection-string").parse;
const config = parse(process.env.DATABASE_URL);
module.exports = ({ env }) => ({
defaultConnection: "default",
connections: {
default: {
connector: "bookshelf",
settings: {
client: "postgres",
host: config.host,
port: config.port,
database: config.database,
username: config.user,
password: config.password,
ssl: {
rejectUnauthorized: false,
},
},
options: {
ssl: true,
},
},
},
});
在 heroku 控制台上创建和打印配置变量会产生预期值。
解决方案
由于某种原因,当您最初将本地数据库设置为 Postgres 时,strapi 文档中对 heroku 的部署方法似乎不起作用。我和你有同样的问题,我使用NODE_ENV
env 变量修复了它。无需在其中创建新的生产数据库配置文件,./config/production/database.js
您可以简单地使用 prod 配置扩展配置文件,./config/database.js
并根据NODE_ENV
设置的内容决定返回哪个。
例如:
module.exports = ({ env }) => {
const parse = require("pg-connection-string").parse;
const config = parse(env("DATABASE_URL", "127.0.0.1"));
const devConfig = {
client: "postgres",
connection: {
host: env("DATABASE_HOST", "127.0.0.1"),
port: env.int("DATABASE_PORT", 5432),
database: env("DATABASE_NAME", "db_name"),
user: env("DATABASE_USERNAME", "root"),
password: env("LOCAL_DB_PASSWORD"),
ssl: env.bool("DATABASE_SSL", false),
},
};
const prodConfig = {
client: "postgres",
connection: {
host: config.host,
port: config.port,
database: config.database,
user: config.user,
password: config.password,
ssl: {
rejectUnauthorized: false,
},
},
debug: false,
};
return
env("NODE_ENV", "development") === "production" ? prodConfig : devConfig
};
推荐阅读
- latex - 在块外的算法2e中添加垂直线
- html - 当我调整窗口大小时,网页会改变样式。我可以让它在任何大小的窗口中看起来都一样吗
- python - 机器学习中训练、测试(Dev)和验证分数的解释
- sql - NUMBER(4,0) 的正确 Oracle 数据类型到 .Net 映射是什么?
- string - 每 X 个字符换行 (#)
- dll - IIS 7.5 需要什么来运行我的 vb6 32 位 DLL?
- c# - 如果 UI 和 API 都部署在不同端口的同一 VM 中,如何使用私有 IP 或 localhost 或 127.0.0.1 作为 API 基本 URL 从 UI 调用 API?
- android - 在 Firebase Auth UI 之后将帐户添加到帐户管理器
- java - 导出 jar 后出现 NoClassDefFoundError
- php - Laravel CRUD 删除路由参数