awo*_*ngh 8 postgresql activerecord connection-pooling ruby-on-rails heroku
我有一个rails 4应用程序我在heroku上托管.他们提供了一些有关如何在使用多线程服务器(puma)时管理数据库连接池的具体建议https://devcenter.heroku.com/articles/concurrency-and-database-connections
当我为我的应用程序运行负载测试时出现错误 - 无法连接到数据库.当每个页面被点击时,rails会初始化活动记录,即使我没有在该页面上进行任何查询,也不会引用任何模型.
我的问题是:
如何创建一种白名单(或黑名单),以便不使用数据库连接为这些特定的控制器操作初始化活动记录?在初始化程序中?
理想情况下,我会在heroku(40个连接)上运行更便宜的postgres服务,因为我知道我的应用程序不经常使用数据库.如果流量高达40个连接将开始出错,这对于那些不会在这些请求上使用db的应用程序来说似乎很愚蠢.
我读到了如何禁用整个应用程序的活动记录:禁用ActiveRecord for Rails 4
但是我该如何有选择地启用它呢?这里是否有任何其他不同的性能考虑因素(不要急于加载这些东西或任何其他陷阱)
在你里面application_controller.rb
before_filter :maybe_disconnect_db
def maybe_disconnect_db
ActiveRecord::Base.remove_connection() if ActiveRecord::Base.connected?
end
def maybe_connect_db
ActiveRecord::Base.establish_connection() unless ActiveRecord::Base.connected?
end
Run Code Online (Sandbox Code Playgroud)
然后对于需要数据库连接的每个控制器/操作添加
skip_before_filter :maybe_disconnect_db, #only or unless filter here
before_filter :maybe_connect_db, #only or unless filter here
Run Code Online (Sandbox Code Playgroud)
这应该为任何特定的数据库请求建立连接,并为任何不需要它的请求断开连接,同时还处理连续的多个数据库请求而不采取任何操作,以及处理连续的多个非数据库请求而不采取任何操作。
ActiveRecord::Base.remove_connection
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |