node.js - 尽管我使用了正确的凭据,但 Strapi 在生产中给了我数据库错误

标签 node.js database postgresql environment-variables strapi

编辑:我在/config/database.js 中找到了一个文件,该文件用于在开发中连接到 sqlite。当我将客户端名称从 sqlite 更改为 postgres 时,问题就开始了。

strapi 不是应该在生产中忽略这样的文件吗?我怎样才能让 Strapi 忽略这个文件,只使用我的 postgres 数据库?

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有关,这让我认为这是一个数据库连接错误。 我可以使用 psql -U postgres -W 从命令行登录我的数据库,这确认我知道我的密码。

此外,我使用 pm2 来运行,并且没有在该文件中使用 process.env,而是直接添加了 db 变量,但这没有什么区别。

该应用程序已在生产模式下构建。我在 pg 中有 3 个 db,一个名为 postgres,一个带有我的应用程序名称,另一个名为 Strapi。

谢谢

我的/config/enviroronments/development.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 文件没有以可被环境变量覆盖的方式设置。

我使用 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: {}
    },
  },
});

关于node.js - 尽管我使用了正确的凭据,但 Strapi 在生产中给了我数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63025386/

相关文章:

javascript - 在与 mongoDb 和 mongoose 聚合后填充单个 ObjectId 引用

Node.js Passport-saml 重定向到 localhost :3000/login/callback all the time

javascript - 如何将 Google Chrome 用作 node.js 服务器?

python - Google 数据存储 ID 是一个长 unicode 而不是整数

c# - "System.Data.OleDb.OleDbException: ' INSERT INTO 语句中的语法错误。 '"

没有关系的数据库表

java - 无法连接到测试容器 Postgres 实例

node.js - Amazon Lex 机器人 - 回复您好

java - 基于通知的实时 PostgreSQL 客户端更新

linux - 使用 psycopg2 时重新声明游标会创建新连接吗?