Heroku运行sequelize db:migrate时出现“自签名证书”错误

3

我有一个使用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是问题的根源;然而,没有一种推荐的解决方案适用于我。

我迄今为止尝试过的:

  1. rejectUnauthorized: false添加到我的Sequelize连接参数中
  2. 在dialectOptions之外的配置中添加ssl:true
  3. NODE_TLS_REJECT_UNAUTHORIZED=0添加到我的Heroku环境变量中
  4. PGSSLMODE=no-verify添加到我的Heroku环境变量中
  5. 切换Heroku的自动证书管理功能开/关状态
  6. 回滚到pg v7(各种子版本)

1-5没有效果,而回滚到pg v7会破坏应用程序(在本地,任何尝试读/写数据库的操作都会挂起而没有错误消息;在heroku上,db:migrate命令运行时没有错误消息,但数据库没有更新)。我认为pg v7与我的Node版本或项目中的其他软件包版本不兼容,但我不知道如何找出兼容版本集,除了通过试错,这是不可行的。另外,顺便说一下,这是一个业余项目,所以我不担心中间人攻击。

有趣的是,当我运行heroku pg:psql时,我能够很好地连接到我的Heroku数据库!

有什么想法可以解决这个问题吗?非常感谢您的帮助!

2个回答

1
我从这里看到了你的问题,那里的被采纳答案对我很有用。我注意到我们使用相同版本的pg和sequelize,但node版本不同。我使用的是v14.8.0。建议你使用nvm切换到该版本并再次尝试,因为我观察到奇数版本的node(如13、15)经常会出现问题(尽管我的观察可能是错误的)。

谢谢camelCase!问题解决了……我的布尔值被包裹在了一些多余的引号中。感谢你的帮忙! - WithoutATowel
哦,我甚至没有注意到。不过很酷。 - camelCase

1

这个:

"ssl": {
    "require": "true",
    "rejectUnauthorized": "false"
 }

应该是这样的:

应该是这样的:

"ssl": {
    "rejectUnauthorized": false
 }

注意布尔值周围的引号。

这是一个愚蠢的错误,但我会将它保留下来,以防其他人将来犯同样的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接