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

时间:2013-12-26 11:19:18

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

  1. 在包含文本的根目录应用程序中创建.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以添加 斌/启动pgbouncer,安全通道 之前 bundle exec unicorn -p $ PORT -c ./config/unicorn.rb
  4. 执行 heroku config:设置PGBOUNCER_PREPARED_STATEMENTS = false --app yourapp heroku config:添加BUILDPACK_URL = https://github.com/ddollar/heroku-buildpack-multi.git --app yourapp
  5. 将新的.buildpacks和Procfile更改部署到生产
  6. 在那之后它就像宣传的那样工作。我第一次部署时忽略了禁用准备好的语句,这导致我的应用程序爆炸了大量的“重复预备语句错误”。如果您正在使用Rails 4.1或更高版本,那么猴子补丁显然不是必需的,但是我猜Rails 3.2中存在一个错误,它不会解析pgbouncer对数据库URL的更改,从而实际上禁用了预处理语句。