我试图连接到我的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连接。
答案 0 :(得分:1)
Vapor 4 + 构建堆栈 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/
答案 1 :(得分:0)
这个过程让我个人付出了很多代价,这个解决方案适合我,试试这个
在档案配置> 秘密> postgresql.json 添加此配置(用于本地或远程,如果此文件不存在,请创建此配置)
{
"host": "127.0.0.1",
"user": "your_user_pc",
"password": "",
"database": "your_user_pc",
"port": 5432
}
用户可以从终端
获取它$ cd ~
在您的文件 Procfile (位于您的项目中,通过查找程序显示)编辑并添加此代码
web: App --env=production --workdir="./"
web: App --env=production --workdir=./ --config:servers.default.port=$PORT --config:postgresql.url=$DATABASE_URL
现在您可以将应用程序重新启动到 heroku ,您应该考虑从heroku正确配置服务器及其所有凭据和 附加组件来自Heroku接口的Postgresql
注意:不要忘记你所做的每一项改变,运行 “steam build” 或 “steam build --clean” 强>
答案 2 :(得分:0)
对于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)!