【问题标题】:How to setup pgbouncer with rails on heroku?如何在heroku上使用rails设置pgbouncer?
【发布时间】:2014-01-14 01:18:54
【问题描述】:

Heroku 最近减少了与生产数据库的可用连接数(从 500 减少到 60)。打开的连接会消耗大量内存并导致问题,因此这似乎是朝着正确方向迈出的一步。

我的应用有 100 多个同时访问数据库的并发进程。 Heroku 建议使用https://github.com/gregburek/heroku-buildpack-pgbouncer 来解决这个问题。

我找不到任何有关如何执行此操作的适当指南。我能够安装和启用 buildpack,但我不知道这些配置变量的作用以及它们是如何工作的。使用默认配置,我会收到大量 ActiveRecord::ConnectionTimeoutError 错误。

有没有人有这方面的经验,如果可以请提供有关如何正确执行此操作以及如何配置需要配置的所有内容的分步指南?

【问题讨论】:

    标签: ruby-on-rails postgresql heroku heroku-postgres pgbouncer


    【解决方案1】:

    您运行的是哪个版本的 Rails?我刚刚使用这些步骤将 pgbouncer 部署到我们的生产 web 应用程序(对于在 Ruby 2.0 上运行的 Rails 3.2 应用程序)

    1. 在根目录 app 中创建包含文本的 .buildpacks 文件 https://github.com/gregburek/heroku-buildpack-pgbouncer.git#v0.2.2 https://github.com/heroku/heroku-buildpack-ruby.git
    2. 我在 config/initializers 中创建了一个名为 disable_prepared_statements_monkey_patch.rb 的文件,其中包含 cwninja 在此线程中发布的代码:https://github.com/gregburek/heroku-buildpack-pgbouncer/pull/7
    3. 修改了我的 Procfile 以添加 bin/start-pgbouncer-stunnel 前 bundle exec unicorn -p $PORT -c ./config/unicorn.rb
    4. 已执行 heroku 配置:设置 PGBOUNCER_PREPARED_STATEMENTS=false --app yourapp heroku 配置:添加 BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git --app yourapp
    5. 已将新的 .buildpacks 和 Procfile 更改部署到生产环境

    在那之后它就像宣传的那样工作。我第一次部署时忽略了禁用预准备语句,这导致我的应用程序因大量“重复的预准备语句错误”而崩溃。如果您使用的是 Rails 4.1 或更高版本,则显然不需要猴子补丁,但是我猜 Rails 3.2 中存在一个错误,它不会以实际禁用准备语句的方式解析 pgbouncer 对数据库 URL 的更改。

    【讨论】:

    • 感谢您的回答。我经历了几乎相同的程序并且能够使其工作。但是,我不确定如何正确设置环境变量 (github.com/gregburek/heroku-buildpack-pgbouncer#tweak-settings) 和 rails 活动记录。它似乎只有在我将活动记录连接池和 PGBOUNCER_DEFAULT_POOL_SIZE 都设置为 50 时才有效,但这有点违背了目的。你能用你如何配置这些值以及为什么更新你的答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2017-03-08
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多