使用ActiveRecord :: Base.establish_connection进行数据库连接太多

时间:2016-06-22 12:29:07

标签: ruby database activerecord sinatra multi-database

我使用ActiveRecord的多数据库。我必须将establish_connection db放在所有模型中。但我想调用库文件的连接。虽然将establish_connection db放入所有模型,但数据库连接数量过多。我该怎么办其他方法?

我的项目是Ruby on Sinatra。

2 个答案:

答案 0 :(得分:0)

为所有可能的连接构建{db_name => connection_instance }的全局哈希值,并智能地从模型中检索它们:

def get_or_establish_connection db
  $connections[db] ||= establish_connection db
end

这样你就可以重用所有已建立的连接。

NB 我写了“全局”,因为如果不了解您的架构细节,就无法提出更强大的建议。在现实生活中,人们会把这个哈希作为一个类变量放在任何地方都可以访问。

答案 1 :(得分:0)

我们在使用多个数据库的项目中所做的是为每个数据库创建一个类,建立连接,并使模型从中继承。这样,每个数据库只创建一个连接。

class UsageTable < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :usage
end
class User < UsageTable