【问题标题】:Vapor Framework : Configure a postgres connection with SSLVapor 框架:使用 SSL 配置 postgres 连接
【发布时间】:2017-05-05 20:23:05
【问题描述】:

我正在尝试连接到我的 Heroku PostgreSQL 数据库,但出现以下错误:

cannotEstablishConnection("FATAL:  no pg_hba.conf entry for host \"37.167.93.189\", user \"clpnkpyttmdtyq\", database \"d3h6147v73mgtu\", SSL off\n")

我知道 Heroku postgres 数据库需要使用 SSL 连接,但我不知道如何在我的 Droplet 对象上配置连接。

这是我的postgresql.json 配置文件:

{
    "host": "ec2-54-163-224-108.compute-1.amazonaws.com",
    "user": "clpnkpyttmdtyq",
    "password": "99201aa07c48e18e7bdf210937857b85bee37cd8d8cb904381b1ddff934c7a4f",
    "database": "d3h6147v73mgtu",
    "port": 5432
}

也许有我不知道的ssl 参数?

我如何添加VaporPostgresSQLProvider

let drop = Droplet()

// Tell the droplet to use our SQL provider service
try drop.addProvider(VaporPostgreSQL.Provider.self)

有什么想法吗?

当我尝试使用本地 postgres 数据库时,它可以工作,因为它不需要 ssl 连接。

【问题讨论】:

  • 这还在进行中吗?
  • 不知道 - 只是想知道您使用的是什么并找到了链接
  • 我尝试从本地 Mac 远程访问 Heroku PostgreSQL,同样的事情发生了。

标签: postgresql ssl heroku vapor


【解决方案1】:

这是一个让我个人付出很多代价的过程,这个解决方案对我有用,试试这个


在文件 Config > secrets > postgresql.json 添加此配置(用于本地或远程,如果此文件不存在,创建这个)

{
   "host": "127.0.0.1",
   "user": "your_user_pc", 
   "password": "",
   "database": "your_user_pc",
   "port": 5432
}

用户可以从终端获取

$ cd ~

在您的文件 Procfile(位于您的项目中,通过 finder 显示)编辑并添加此代码

web: App --env=production --workdir="./"
web: App --env=production --workdir=./ --config:servers.default.port=$PORT --config:postgresql.url=$DATABASE_URL

现在您可以重新启动您的应用程序到 heroku,您应该考虑从 heroku 正确配置服务器及其所有凭据和 附加组件来自 Heroku 界面的 Postgresql

注意:不要忘记您所做的每一个更改,运行 "vapor build""vapor build --clean"

【讨论】:

    【解决方案2】:

    对于 Heroku,我们需要未经验证的 TLS 传输。 https://api.vapor.codes/postgresql/latest/PostgreSQL/Classes/PostgreSQLConnection/TransportConfig.html

    let pgURL = Environment.get("DATABASE_URL") ?? "postgres://user:password@host:port/database"
    
    let pgConfig = PostgreSQLDatabaseConfig(url: pgURL, transport: PostgreSQLConnection.TransportConfig.unverifiedTLS)!
    

    【讨论】:

    【解决方案3】:

    Vapor 4 + build stack heroku-20 + Heroku Postgres 的标准计划

    Rijel David 的建议对我有用

    unverifiedTLS 语法略有变化

    if let databaseURL = Environment.get("DATABASE_URL"), var postgresConfig = PostgresConfiguration(url: databaseURL) {
        postgresConfig.tlsConfiguration = .forClient(certificateVerification: .none)
        app.databases.use(.postgres(
            configuration: postgresConfig
        ), as: .psql)
    } else {
        // ...
    }
    

    查看 Vapor 文档 - https://docs.vapor.codes/4.0/deploy/heroku/

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      相关资源
      最近更新 更多