繁体   English   中英

Heroku Rails-关闭Active Record Postgres连接

[英]Heroku Rails - Turn off Active Record Postgres connection

我在heroku上托管了Rails 4应用程序。 他们为使用多线程服务器(puma)时如何管理数据库连接池提供了一些具体建议。https://devcenter.heroku.com/articles/concurrency-and-database-connections

当我为我的应用程序执行负载测试时,出现错误-无法连接到数据库。 当每个页面都被点击时,Rails会初始化活动记录,即使我没有对该页面进行任何查询或引用任何模型也是如此。

我的问题是:

如何创建一种白名单(或黑名单),以便不使用这些特定控制器操作的数据库连接来初始化活动记录? 在初始化器中?

理想情况下,我会在heroku(40个连接)上运行便宜的postgres服务,因为我知道我的应用程序并不经常使用db。 如果流量超过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

然后为每个需要数据库连接的控制器/动作添加

skip_before_filter :maybe_disconnect_db, #only or unless filter here
before_filter      :maybe_connect_db,    #only or unless filter here

这应该为任何特定的数据库请求建立连接,并为不需要此请求的任何请求断开连接,同时还可以连续执行多个db请求而不执行任何操作,并且连续处理多个非db请求而不执行任何操作。

ActiveRecord :: Base.remove_connection

ActiveRecord :: Base。Establishment_connection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM