[英]Knex Heroku Error: self signed certificate
我不断收到此错误:
Error: self signed certificate
在终端中运行此命令时:
knex migrate:latest --env production
我的 knexfile.js
require('dotenv').config();
module.exports = {
development: {
client: "pg",
connection: {
host: "localhost",
database: "my-movies"
}
},
production: {
client: "pg",
connection: process.env.DATABASE_URL
}
};
我的.env 文件:
DATABASE_URL=<my_database_url>?ssl=true
Heroku 应用信息:
Addons: heroku-postgresql:hobby-dev
Auto Cert Mgmt: false
Dynos:
Git URL: https://git.heroku.com/path-name.git
Owner: xxxxxxxxx@xxxx.com
Region: us
Repo Size: 0 B
Slug Size: 0 B
Stack: heroku-18
Web URL: https://my-appname.herokuapp.com/
我已经尝试在 ssl: true 的 knexfile 的生产中放置一个键值对,我得到了同样的错误。 过去我已经这样做了很多很多次,从来没有遇到过这个问题。 想知道 Heroku 是否改变了任何东西,但是在搜索他们的文档时我找不到任何东西。
knexfile.js
的以下配置对我有用。
...
production: {
client: 'postgresql',
connection: {
connectionString: process.env.DATABASE_URL,
ssl: { rejectUnauthorized: false }
}
}
...
其中DATABASE_URL
是您通过运行heroku config --yourAppName
获得的
这是由于 pg@^8 (2020/02/25) cf. 这个 heroku 帮助论坛。
您可以获得完整的 pg@^8 公告,但这里是相关段落:
现在我们将对 tls.connect 使用默认的 ssl 选项,其中包括启用的拒绝未授权。 这意味着如果您使用自签名证书,您的连接尝试可能会失败。
似乎 heroku 在某处使用自签名证书。
可能的解决方案:
ssl: { rejectUnauthorized: false }
(参见上面链接的公告) ssl: { rejectUnauthorized: false }
pg 配置目前也不适合我。但我通过heroku 文档找到了一个临时(可能是永久)解决方案
设置以下配置变量:
heroku config:set PGSSLMODE=no-verify
对我有用的不仅仅是使用连接字符串,而且还从我的数据库中添加 CA 作为 knex 中连接 object 的选项。
production: {
client: 'postgresql',
connection: {
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false,
ca: process.env.POSTGRES_CA,
}
}
}
如果您使用的配置如下:
...
production: {
client: 'postgresql',
connection: {
connectionString: process.env.DATABASE_URL,
ssl: { rejectUnauthorized: false }
}
}
...
...并且它仍然不适合您,请确保您的连接字符串中没有?ssl=true
或sslmode
在 DB 中设置。
如果ssl
在您的连接字符串中设置,它将覆盖您的配置的ssl
部分,这意味着行为相当于:
...
production: {
client: 'postgresql',
connection: {
connectionString: process.env.DATABASE_URL,
ssl: true
}
}
...
从连接字符串中删除ssl
条目将解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.