【问题标题】:How to handle the postgres connection when heroku changes the DATABASE_URL当heroku更改DATABASE_URL时如何处理postgres连接
【发布时间】:2019-09-03 06:48:46
【问题描述】:

Heroku Postgres 上写着:

您应用的 DATABASE_URL 配置变量的值可能随时更改。您不应在 Heroku 应用内部或外部依赖此值。

我正在开发一个 Node.js 服务器,它使用node-postgres 来连接和管理与数据库的连接池。

但是当 Heroku 更改 DATABASE_URL 时会发生什么?这个问题应该如何处理?

【问题讨论】:

    标签: node.js heroku heroku-postgres node-postgres


    【解决方案1】:

    您可以通过始终使用 DATABASE_URL 具有的任何值连接到 Postgres 来处理此问题。例如,您可以在创建池时将此值用作connection string

    const connectionString = process.env.DATABASE_URL
    
    const pool = new Pool({
      connectionString: connectionString,
    })
    

    Heroku 的 dynos restart when their environment variables or addons are changed,这应该会导致您的代码在重新启动时获取新的数据库连接字符串。

    【讨论】:

    • 我已经使用环境变量了。但有些事情我不清楚:pool = new Pool ({connectionString: connectionString}) 它只执行第一次,之后,当需要新连接时,会在那些已经活跃且可用的连接中进行搜索,否则会建立一个新连接。所以问题是立竿见影的:1)connectionString 如何捕捉变化? 2) 池中已经处于活动状态的连接会发生什么情况?
    • @alessiovolpe,当变量更改时,您的测功机应该重新启动并选择新设置。我会将其添加到我的答案中。
    • 现在我明白了,否则我无法解释如何在运行时处理这件事。非常感谢!
    • 如果您启用了preboot,heroku 将不会更改环境并且不会重新启动您的测功机。刚刚通过 Heroku 支持确认了这一点。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2021-06-19
    • 2016-05-05
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2022-09-28
    相关资源
    最近更新 更多