我有一个使用Postgres数据库的Node/Express应用程序,在我的本地机器上运行得很好,但是我在Heroku上运行它时遇到了困难。问题发生在我推送到Heroku之后——构建成功后——当我尝试运行heroku run sequelize db:migrate
时。错误信息如下:
ERROR: self signed certificate
我的设置:
- Node v15.12.0
- Postgres 数据库(“Heroku Postgres”插件)
- pg v8.5.1
- sequelize v6.6.2
- sequelize-cli v6.2.0
我的 Sequelize 连接参数:
{
"development": {
"username": "XXXXXX",
"password": "XXXXXX",
"database": "party_playlist",
"host": "127.0.0.1",
"dialect": "postgres"
},
"production": {
"use_env_variable": "DATABASE_URL",
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"require": "true",
"rejectUnauthorized": "false"
}
}
}
}
许多帖子都在讨论这个问题(GitHub:1 | 2 | 3,StackOverflow:1 | 2 | 3),大多数指向pg v8是问题的根源;然而,没有一种推荐的解决方案适用于我。
我迄今为止尝试过的:
- 将
rejectUnauthorized: false
添加到我的Sequelize连接参数中 - 在dialectOptions之外的配置中添加
ssl:true
- 将
NODE_TLS_REJECT_UNAUTHORIZED=0
添加到我的Heroku环境变量中 - 将
PGSSLMODE=no-verify
添加到我的Heroku环境变量中 - 切换Heroku的
自动证书管理
功能开/关状态 - 回滚到pg v7(各种子版本)
1-5没有效果,而回滚到pg v7会破坏应用程序(在本地,任何尝试读/写数据库的操作都会挂起而没有错误消息;在heroku上,db:migrate命令运行时没有错误消息,但数据库没有更新)。我认为pg v7与我的Node版本或项目中的其他软件包版本不兼容,但我不知道如何找出兼容版本集,除了通过试错,这是不可行的。另外,顺便说一下,这是一个业余项目,所以我不担心中间人攻击。
有趣的是,当我运行heroku pg:psql
时,我能够很好地连接到我的Heroku数据库!
有什么想法可以解决这个问题吗?非常感谢您的帮助!