如何在heroku上使用rails设置pgbouncer?

 Xiao兔兔乖乖 发布于 2023-02-08 09:38

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

我的应用程序有超过100个并发进程,它们同时访问数据库.Heroku建议使用https://github.com/gregburek/heroku-buildpack-pgbouncer来解决此问题.

我无法找到关于如何做到这一点的适当指南.我能够安装并启用buildpack,但我不知道这些配置变量的作用以及它们如何工作.使用默认配置,我会遇到大量ActiveRecord::ConnectionTimeoutError错误.

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

1 个回答
  • 你在运行什么版本的Rails?我刚刚使用这些步骤将pgbouncer部署到我们的生产webapp(对于在Ruby 2.0上运行的Rails 3.2应用程序)

      在根目录应用程序中创建.buildpacks文件,其中包含文本 https://github.com/gregburek/heroku-buildpack-pgbouncer.git#v0.2.2 https://github.com/heroku/heroku-buildpack-ruby.git

      我在config/initializers中创建了一个名为disable_prepared_statements_monkey_patch.rb的文件,其中包含cwninja在此主题中发布的代码:https://github.com/gregburek/heroku-buildpack-pgbouncer/pull/7

      修改我的Procfile以在bundle exec unicorn -p $ PORT -c ./config/unicorn.rb之前添加bin/start-pgbouncer-stunnel

      执行heroku config:set PGBOUNCER_PREPARED_STATEMENTS = false --app yourapp heroku config:add BUILDPACK_URL = https://github.com/ddollar/heroku-buildpack-multi.git --app yourapp

      将新的.buildpacks和Procfile更改部署到生产环境中

    它就像那时宣传的那样.我第一次部署时忽略了禁用准备好的语句,这导致我的应用程序爆炸了大量的"重复预备语句错误".如果您正在使用Rails 4.1或更高版本,那么猴子补丁显然不是必需的,但是我猜Rails 3.2中存在一个错误,它不会解析pgbouncer对数据库URL的更改,从而实际上禁用了预处理语句.

    2023-02-08 09:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有