[英]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.