【问题标题】:Database connection too much with ActiveRecord::Base.establish_connection与 ActiveRecord::Base.establish_connection 的数据库连接过多
【发布时间】:2016-06-22 12:29:06
【问题描述】:
我使用带有 ActiveRecord 的多个数据库。我必须在所有模型中输入establish_connection db。但我想调用库文件的连接。虽然为所有模型放入establish_connection db 数据库连接数太多。我该怎么做其他方法?
我的项目是 Sinatra 上的 Ruby。
【问题讨论】:
标签:
ruby
database
activerecord
sinatra
multi-database
【解决方案1】:
为您拥有的所有可能的连接构建一个{db_name => connection_instance } 的全局哈希,并从您的模型中智能地检索它们:
def get_or_establish_connection db
$connections[db] ||= establish_connection db
end
这样你就可以重用所有已经建立的连接。
注意我之所以写“global”是因为如果不了解您的架构细节,就无法提出更强大的建议。在现实生活中,人们会将这个散列作为一个类变量放在任何地方都可以访问的地方。
【解决方案2】:
我们在使用多个数据库的项目中所做的是为每个数据库创建一个类,建立连接并让模型从它继承。这样,每个数据库只创建一个连接。
class UsageTable < ActiveRecord::Base
self.abstract_class = true
establish_connection :usage
end
class User < UsageTable