【问题标题】: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
      

      【讨论】:

      • 我试过你的建议,但数据库类不能继承到模型类。
      猜你喜欢
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      相关资源
      最近更新 更多