スレッドの数puma
を変更して、複数のリクエストを同時に処理できます。しかし、Heroku の場合、postgres へのデータベース接続は制限されています。
より多くのリクエストを処理するために、dyno の数を増やすことができます。各 dyno には、デフォルトで 0:16 のスレッドがあります。この場合、負荷がかかると、各 dyno はデータベースに対して 16 の接続を確立できます。
RailsActiveRecord
では、次の構成を使用して、Rails ワーカー プロセスごとのデータベース接続数を制限できます。
Rails.application.config.after_initialize do
ActiveRecord::Base.connection_pool.disconnect!
ActiveSupport.on_load(:active_record) do
config = ActiveRecord::Base.configurations[Rails.env]
config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
config['pool'] = ENV['DB_POOL'] || ENV['MAX_THREADS'] || 5
ActiveRecord::Base.establish_connection(config)
end
end
ただし、db 接続制限では、dyno の数が増えると接続制限に達します。
リクエストが処理されたらすぐにスレッドを強制終了してデータベース接続を閉じる方法はありますか?
pgbouncer
asを使用してみましたbuildpack
が、準備済みステートメントに問題があります。
現在rails 4.0.0
使用中puma 2.7.1
です。
リクエストが完了したときにこのように構成できるイベントフックがプーマにありますか?
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end