Strapi 在生产中给我数据库错误,即使我使用的是正确的凭据
Posted
技术标签:
【中文标题】Strapi 在生产中给我数据库错误,即使我使用的是正确的凭据【英文标题】:Strapi giving me DB errors in production, even though I'm using correct credentials 【发布时间】:2020-11-11 11:24:36 【问题描述】:编辑:我在 /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>"
【问题讨论】:
【参考方案1】:发现问题。当我创建应用程序时,我使用 sqlite 作为我的数据库。因此,默认的 database.js 文件没有以可以被 env 变量覆盖的方式设置。
我创建了一个新的本地 Strapi 应用,以 pgsql 作为我的数据库,并将 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:
,
,
);
【讨论】:
以上是关于Strapi 在生产中给我数据库错误,即使我使用的是正确的凭据的主要内容,如果未能解决你的问题,请参考以下文章