puma
可以更改线程数以同时处理多个请求。但是在 Heroku 的情况下,与 postgres 的数据库连接是有限的。
为了处理更多的请求,我们可以增加 dyno 的数量,每个 dyno 都有默认的 0:16 线程。在这种情况下,每个测功机在负载下可以与数据库建立 16 个连接。
使用 rails ActiveRecord
,我们可以使用以下配置限制每个 rails worker 进程的数据库连接数:
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 连接限制,如果测功机的数量增加,连接限制就会受到影响。
有什么方法可以在请求完成后立即终止线程并关闭数据库连接?
我尝试使用pgbouncer
as abuildpack
但准备好的语句存在问题。
我目前正在rails 4.0.0
使用puma 2.7.1
.
puma 中是否有一些事件挂钩,我们可以在请求完成时进行这样的配置?
on_worker_boot do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.establish_connection
end
end