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

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

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

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

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

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

最佳答案

您运行的 Rails 版本是什么?我刚刚使用这些步骤将 pgbouncer 部署到我们的生产 Web 应用程序(对于在 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 以添加 bin/start-pgbouncer-stunnel 前 捆绑执行 unicorn -p $PORT -c ./config/unicorn.rb
  4. 已执行 heroku 配置:设置 PGBOUNCER_PREPARED_STATEMENTS=false --app yourapp heroku 配置:添加 BUILDPACK_URL= https://github.com/ddollar/heroku-buildpack-multi.git --app 你的应用
  5. 将新的 .buildpacks 和 Procfile 更改部署到生产环境

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

关于ruby-on-rails - 如何在heroku上使用rails设置pgbouncer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783907/

相关文章:

node.js - 在 Heroku 中使用 Docker 部署 Node.js 上的 "Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch"

python - 使用 Django 创建网站,但图像在部署到 heroku 时未显示,但在 localhost 中显示

ruby-on-rails - CSR 失败 : Error Parsing Request ASN1 bad tag value met (ASN: 267 CRYPT_E_ASN1_BADTAG)

sql - 如何在 SQL 中获取最接近请求参数的值?

sql - 如何使用 ActiveRecord 和 Postgresql 按列选择唯一记录

php - Postgresql自定义函数返回表

ssl - Heroku SSL : install intermediate cert?

mysql - Rails 使用 ActiveRecord 乘以 afcolumn 的值

ruby-on-rails - 为什么 styleselect-button 没有出现在我的 Tinymce 工具栏菜单中?

ruby-on-rails - Font Awesome 图标在 Heroku 上显示为黑色方 block