node.js - Strapi 在生产中给我数据库错误,即使我使用的是正确的凭据
问题描述
编辑:我在 /config/database.js 找到了一个文件,用于在开发中连接到 sqlite。当我将客户端名称从 sqlite 更改为 postgres 时,问题就开始了。
Strapi 不应该在生产中忽略这样的文件吗?我怎样才能让strapi忽略这个文件,只使用我的postgres db?
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'sqlite',
filename: env('DATABASE_FILENAME', '.tmp/data.db'),
},
options: {
useNullAsDefault: true,
},
},
},
});
结束编辑。
我正在尝试让我的strapi应用程序在生产中启动,但它一直出错说
[2020-07-22T01:15:40.246Z] debug ⛔️ Server wasn't able to start properly.
[2020-07-22T01:15:40.247Z] error error: password authentication failed for user "<redacted>"
输出的其余部分与 pg 有关,这让我认为这是一个 DB 连接错误。我可以从命令行使用 登录我的数据库psql -U postgres -W
,这确认我知道我的密码。
另外,我使用 pm2 来运行东西,而不是在该文件中使用 process.env,我只是直接添加了 db 变量,但这没有任何区别。
该应用程序已在生产模式下构建。我在 pg 中有 3 个 db,一个称为 postgres,一个带有我的应用程序名称,另一个称为 strpi。
谢谢
我的 /config/environments/production.database.json 看起来像这样
{
"defaultConnection": "default",
"connections": {
"default": {
"connector": "bookshelf",
"settings": {
"client": "postgres",
"host": "${process.env.DATABASE_HOST || '127.0.0.1'}",
"port": "${process.env.DATABASE_PORT || 27017}",
"database": "${process.env.DATABASE_NAME || 'strapi'}",
"username": "${process.env.DATABASE_USERNAME || ''}",
"password": "${process.env.DATABASE_PASSWORD || ''}"
},
"options": {
"ssl": false
}
}
}
}
我在后端应用程序的根目录有一个 .env 文件,看起来像这样
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME="<redacted - all letters>"
DATABASE_USERNAME="<redacted - all letters>"
DATABASE_PASSWORD="<redacted - all letters>"
解决方案
发现了问题。当我创建应用程序时,我使用 sqlite 作为我的数据库。结果,默认的 database.js 文件没有以可能被 env 变量覆盖的方式设置。
我用 pgsql 作为我的数据库创建了一个新的本地 Strapi 应用程序,并将 database.js 文件的内容复制到我的服务器。现在都在工作。
新文件供参考
module.exports = ({ env }) => ({
defaultConnection: 'default',
connections: {
default: {
connector: 'bookshelf',
settings: {
client: 'postgres',
host: env('DATABASE_HOST', '127.0.0.1'),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'my-strapi-project'),
username: env('DATABASE_USERNAME', 'testing'),
password: env('DATABASE_PASSWORD', 'testing'),
ssl: env.bool('DATABASE_SSL', false),
},
options: {}
},
},
});
推荐阅读
- c# - 如何在 EF Core 中实现并发计数器
- javascript - Javascript 使用 reduce 和 acc 减少到期望数组
- open-policy-agent - 将我的策略 (policy.rego) bydfault 应用到我的 opa
- javascript - 请帮助我的 HTML 和 Javascript 任务
- javascript - 如何在 node.js 中获得与 Java .readUTF() 相同的结果?
- java - opencv java中的蒙版图像
- string - 在fortran中获取可变长度字符串列表的更好方法
- javascript - discord.js 数量增加但重置
- java - SpringMVC - Java.lang.IllegalStateException:Bean 名称既不是 BindingResult 也不是普通目标对象
- php - 根据 WooCommerce 中的类别和自定义文本字段添加到购物车验证