使用puma
可以更改线程数以同时处理多个请求。但是对于Heroku,与postgres的数据库连接是有限的。
为了处理更多请求,我们可以增加dynos的数量,其中每个dyno默认情况下都会说0:16个线程。在加载的情况下,每个dyno可以与数据库建立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连接限制,如果dynos数量增加,则连接限制将被命中。
有没有办法在请求被提供后立即杀死一个线程并关闭数据库连接?
我尝试使用pgbouncer
作为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
答案 0 :(得分:0)
如果您使用MRI,请尝试使用美洲狮的群集模式。我建议设置4名工人。
puma -w 4
如果使用Jruby,则需要指定近20个线程。但它不应该超过允许连接数据库的数量。
puma -t 20:20
更多信息: