2

Heroku は最近、本番データベースへの利用可能な接続数を (500 から 60 に) 減らしました。開かれた接続は多くのメモリを消費し、問題を引き起こしていたので、正しい方向への一歩のようです.

私のアプリには、すべてが同時にデータベースにアクセスする 100 を超える同時プロセスがあります。Heroku は、https://github.com/gregburek/heroku-buildpack-pgbouncerを使用してこの問題を修正することを提案しています。

これを行う方法に関する適切なガイドを見つけることができませんでした。ビルドパックをインストールして有効にすることはできましたが、これらの構成変数が何をし、どのように機能するのかわかりません。デフォルトの構成では、大量の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を含むルート ディレクトリ app に .buildpacks ファイルを作成します 。
  2. このスレッドで cwninja によって投稿されたコードを含む disable_prepared_statements_monkey_patch.rb というファイルを config/initializers に作成しました: https://github.com/gregburek/heroku-buildpack-pgbouncer/pull/7
  3. bundle exec unicorn -p $PORT -c ./config/unicorn.rb の前に bin/start-pgbouncer-stunnel を追加するように Procfile を変更しました
  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 に答える