Heroku 运行 sequelize db:migrate

时间:2021-04-02 18:20:14

标签: node.js postgresql heroku sequelize.js

我有一个带有 Postgres 数据库的 Node / Express 应用程序,可以在我的本地机器上完美运行,但我正在努力让它在 Heroku 上启动和运行。问题发生在我推送到 Heroku(成功构建)之后,然后我尝试运行 heroku run sequelize db:migrate。错误是:

ERROR: self signed certificate

我的设置:

  • 节点 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. ssl:true 添加到 dialectOptions 之外的配置
  3. NODE_TLS_REJECT_UNAUTHORIZED=0 添加到我的 Heroku 环境变量
  4. PGSSLMODE=no-verify 添加到我的 Heroku 环境变量
  5. 打开/关闭 Heroku 的 Automatic Certificate Management 功能
  6. 回滚到 pg v7(各种颠覆)

1-5 无效,并且回滚到 pg v7 会破坏应用程序(在本地,任何对数据库的读取/写入尝试都挂起且没有错误消息;在 heroku 上,db:migrate 命令运行时没有错误消息,但数据库没有更新)。我假设 pg v7 与我的 Node 版本或我的项目中的其他一些包版本不兼容,但我不知道如何通过反复试验来确定兼容版本集是什么,这是不可行的。另外,顺便提一下,这是一个业余项目,所以我不担心 MITM 攻击。

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

有什么想法可以解决这个问题吗?任何和所有的帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我从 here 看到您的问题,那里接受的答案对我有用。我观察到我们有相同版本的 pg 和 sequelize 但不同版本的 node。我在 v14.8.0 上。我建议您使用 nvm 切换到该版本并重试,因为我观察到具有奇数的节点版本(如 13,15)经常会出现问题(不过我的观察可能是错误的)。

答案 1 :(得分:0)

这个:

$ awk -F'>antisense_|:' '/^ *>antisense_/ {gsub("-", ".", $2); print}' file
    >antisense_tadA::NC_009089.1:19643-19848(-)
    >antisense_recR::NC_009089.1:22931-23105(+)
    >antisense_16s_rRNA::NC_009089.1:25279-26010(-)
     tRNA.Leu_tRNA.Met  NC_009089.1 30389-30422(+)
     tRNA.Arg_tRNA.Gly_tRNA.Asp_tRNA.Val  NC_009089.1 30559-31181(-)

$ awk 'BEGIN {OFS=FS="/antisense/|:"} {gsub("-", ".", $2)} 1' file
    >-::NC_009089.1:17609-17804(+)
    ATTAAATAGAAAAAATGAATTTAATATAAAAAATTAAAGAAAATTCTAAAAAAAAAAAGATAAGGTCTTA
    >antisense_tadA::NC_009089.1:19643-19848(-)
    TTTATAAAAATATTTAGTGTTTTTTTTAAATTAGTTCTAAAATAATTTTTAGATATTCATACAAGAGTGT
    >-::NC_009089.1:20139-20394(-)
    GCTGTTTTTCTATATATGAATTTTGCTACTTTTACATTATTATTATTAAAATAATCTAATTTAAACTCAT
    >antisense_recR::NC_009089.1:22931-23105(+)
    TCATCTATAATCGCTTTAGATAAAGCTTCCACATCATTAGTATTCATATTAATAATATGAAAAGCCAATC
    >antisense_16s_rRNA::NC_009089.1:25279-26010(-)
    CTCTATTTTCCTTTTTATTCTATATTTAAATTTTTTATTTACAAGAATATTTTTAATATAACATATTATG
    >antisense_tRNA-Leu_tRNA-Met::NC_009089.1:30389-30422(+)
    TTTACATAGAGTTAACACTCTAAAAACTGCACA
    >antisense_tRNA-Arg_tRNA-Gly_tRNA-Asp_tRNA-Val::NC_009089.1:30559-31181(-)
    CTTAACTTCTGTGTTCGGAATGGGAACAGGTGTATCCTCTTTCCCACCAAGTACCATCAGCGCTAAAGAG

$ awk 'BEGIN {OFS=FS="antisense|:"} {gsub("-", ".", $2)} 1' file
    >-::NC_009089.1:17609-17804(+)
    ATTAAATAGAAAAAATGAATTTAATATAAAAAATTAAAGAAAATTCTAAAAAAAAAAAGATAAGGTCTTA
    >antisense_tadA::NC_009089.1:19643-19848(-)
    TTTATAAAAATATTTAGTGTTTTTTTTAAATTAGTTCTAAAATAATTTTTAGATATTCATACAAGAGTGT
    >-::NC_009089.1:20139-20394(-)
    GCTGTTTTTCTATATATGAATTTTGCTACTTTTACATTATTATTATTAAAATAATCTAATTTAAACTCAT
    >antisense_recR::NC_009089.1:22931-23105(+)
    TCATCTATAATCGCTTTAGATAAAGCTTCCACATCATTAGTATTCATATTAATAATATGAAAAGCCAATC
    >antisense_16s_rRNA::NC_009089.1:25279-26010(-)
    CTCTATTTTCCTTTTTATTCTATATTTAAATTTTTTATTTACAAGAATATTTTTAATATAACATATTATG
    >antisense|:_tRNA.Leu_tRNA.Metantisense|:antisense|:NC_009089.1antisense|:30389-30422(+)
    TTTACATAGAGTTAACACTCTAAAAACTGCACA
    >antisense|:_tRNA.Arg_tRNA.Gly_tRNA.Asp_tRNA.Valantisense|:antisense|:NC_009089.1antisense|:30559-31181(-)
    CTTAACTTCTGTGTTCGGAATGGGAACAGGTGTATCCTCTTTCCCACCAAGTACCATCAGCGCTAAAGAG

应该是这样的:

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

注意布尔值周围的引号。

愚蠢的错误,但我会留下这个,以防其他人有一天犯同样的错误。