2

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

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

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

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

4

1 回答 1

5

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

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

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

于 2014-01-15T17:23:09.570 回答