Heroku最近减少了与生产数据库的可用连接数(从500到60).打开的连接消耗大量内存并导致问题,因此这似乎是朝着正确方向迈出的一步.
我的应用程序有超过100个并发进程,它们同时访问数据库.Heroku建议使用https://github.com/gregburek/heroku-buildpack-pgbouncer来解决此问题.
我无法找到关于如何做到这一点的适当指南.我能够安装并启用buildpack,但我不知道这些配置变量的作用以及它们如何工作.使用默认配置,我会遇到大量ActiveRecord::ConnectionTimeoutError
错误.
有没有人有这方面的经验,如果可以请提供有关如何正确执行此操作以及如何配置需要配置的所有内容的分步指南?
你在运行什么版本的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的更改,从而实际上禁用了预处理语句.