【问题标题】:I can not connect to Postgres DB with Strapi on Heroku我无法在 Heroku 上使用 Strapi 连接到 Postgres DB
【发布时间】:2020-09-16 02:00:12
【问题描述】:

尝试使用 Postgres 在 Heroku 上部署 Strapi,如此处所述

https://strapi.io/documentation/v3.x/deployment/heroku.html

但我得到了这个错误

error: no pg_hba.conf entry for host "84.212.51.43", user "ssqqeaz***", database "d6gtu***", SSL off

我使用 Heroku Postgres 插件。

我的数据库配置:

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', 27017),
        database: env('DATABASE_NAME', 'strapi'),
        username: env('DATABASE_USERNAME', ''),
        password: env('DATABASE_PASSWORD', ''),
      },
      options: {
        ssl: true
      },
    },
  },
});

为什么?请帮忙!

【问题讨论】:

  • 这能回答你的问题吗? Heroku Database Connection Properties
  • 如何将 ?ssl=true 添加到连接字符串中。我尝试在 Heroku UI 上更改 DATABASE_URL,但收到一条消息:无法更新项目。如何更新?

标签: postgresql heroku-postgres strapi


【解决方案1】:

尝试将ssl : true改为ssl : false

【讨论】:

  • 它没有帮助:(
【解决方案2】:

您发布的当前配置不适用于 Heroku Postgres 数据库。这里的主要问题是您正在从手动设置的配置变量中读取 postgres 数据库 url 的组件。 Heroku 强烈建议不要这样做,因为他们可能需要在发生灾难时将数据库移动到新主机。 DATABASE_URL 由 Heroku 在您在应用程序上创建数据库时设置,它是您可以依赖的一个配置变量来保持最新状态。继续……

您需要从DATABASE_URL 配置变量中解析出用户名、密码、主机、端口和数据库名称,并将它们提供给settings 块的属性。根据您提供的错误,我可以告诉您目前没有这样做,因为 Heroku 数据库用户名都以 'u' 开头,所以如果您收到错误 user "ssqqeaz***",那就是非常错误的。作为第一步,您可能会尝试在设置块中对这些值进行硬编码以确保其正常工作(确保在执行此操作后轮换凭据,或者以其他方式清理您的 git 历史记录以防止泄露凭据)。 postgres 连接 url 的模式是这样的:postgres:// $USERNAME : $PASSWORD @ $HOSTNAME : $PORT / $DATABASE_NAME

【讨论】:

  • 您好,谢谢您的回答。我不明白如何从 DATABASE_URL 中提取用户名/密码等。不应该strapi为我做吗?该站点在本地工作的第二件事,因此以“ssqq***”开头的用户名是完全正确的。 :-/
  • Strapi 应该为你做这件事吗?是的,它可能应该,但看起来它没有。许多 ORM 对DATABASE_URL 具有一流的支持,并且能够动态解析出组件(用户名、密码、主机等)并将它们应用于配置。不幸的是,您需要手动执行此操作。快速的 Google 搜索显示了有助于解决此问题的 npm 包,也许您可​​以查看这些以获得灵感。关于用户名,您是否将 Postgres 凭证与 Herkoku Postgres 一起使用?因为所有默认凭据都以“u”开头。
【解决方案3】:

不确定它是否有助于移动您的配置...

  • 从选项键中删除 ssl

  • 在设置密钥内的密码后插入 ssl 例如。

    ssl: env.bool('DATABASE_SSL', false),

还要检查 Heroku 中的应用程序配置变量,并确保您具有所需的 postgres 配置变量设置,并且它们与 heroku 生成的 DATABASE_URL 配置变量匹配。 最后检查您的 ./config/server.js 文件并确保您的主机是 0.0.0.0

例如。

module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
  admin: {
    auth: {
      secret: env('ADMIN_JWT_SECRET', '**********************************'),
    },
  },
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2019-07-15
    • 2020-04-04
    • 2020-12-01
    • 2019-04-04
    • 2020-10-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多