Heroku 最近减少了生产数据库的可用连接数量(从 500 个减少到 60 个)。打开的连接消耗了大量内存并导致问题,因此这似乎是朝着正确方向迈出的一步。
我的应用程序有超过 100 个并发进程,它们都同时访问数据库。 Heroku 建议使用 https://github.com/gregburek/heroku-buildpack-pgbouncer来解决这个问题。
我无法找到任何有关如何执行此操作的正确指南。我能够安装并启用 buildpack,但我不知道这些配置变量的作用以及它们如何工作。使用默认配置,我收到大量 ActiveRecord::ConnectionTimeoutError
错误。
有人有这方面的经验吗?如果可以,请提供有关如何正确执行此操作以及如何配置需要配置的所有内容的分步指南?
最佳答案
您运行的 Rails 版本是什么?我刚刚使用这些步骤将 pgbouncer 部署到我们的生产 Web 应用程序(对于在 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 以添加 bin/start-pgbouncer-stunnel 前 捆绑执行 unicorn -p $PORT -c ./config/unicorn.rb
- 已执行 heroku 配置:设置 PGBOUNCER_PREPARED_STATEMENTS=false --app yourapp heroku 配置:添加 BUILDPACK_URL= https://github.com/ddollar/heroku-buildpack-multi.git --app 你的应用
- 将新的 .buildpacks 和 Procfile 更改部署到生产环境
在那之后它就如广告中所宣传的那样起作用了。我第一次部署时忽略了禁用准备好的语句,这导致我的应用程序因大量“重复的准备好的语句错误”而崩溃。如果您使用的是 Rails 4.1 或更高版本,显然不需要猴子补丁,但是我猜想 Rails 3.2 中存在一个错误,它不会解析 pgbouncer 对数据库 URL 的更改,从而导致准备好的语句实际上被禁用。
关于ruby-on-rails - 如何在heroku上使用rails设置pgbouncer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783907/