【问题标题】:Rails application with multiple database connections具有多个数据库连接的 Rails 应用程序
【发布时间】:2017-04-09 07:32:11
【问题描述】:

我有一个带有多个数据库连接的 Rails 实例,它提供两种不同的服务。假设它服务于服务 A服务 B。 服务 A 需要连接到数据库 A' 而服务 B 需要连接到数据库 B 'A'B' 中的大多数表都是相同的(表名、架构)。例如。数据库 A'B' 都有一个表 User,其架构相同。目前我的用户模型如下:

class User_A < ABase #connects to A'
    self.table_name = "user"

    def foo
      ...
    end

end

class User_B < BBase #connects to B'
    self.table_name = "user"

    def foo
      ...
    end

end

在控制器内部,我必须执行以下操作:

if is_A?
 user = User_A.find(123)
else
 user = User_B.find(123)
end

有没有更好的方法来处理 Rails 中的这种情况,从而最大限度地减少代码重复?

【问题讨论】:

    标签: ruby-on-rails ruby multi-tenant multiple-databases


    【解决方案1】:
    Multitenancy for Rails and ActiveRecord
    

    Apartment 提供了一些工具来帮助您处理 Rails 应用程序中的多个租户。如果您需要基于帐户或公司隔离某些数据,但仍允许某些数据存在于普通租户中,Apartment 可以提供帮助

    gem 'apartment'
    

    Apartment gem 这使您可以以最简单的方式访问多个数据库。

    Apartment::Tenant.switch db_name
    

    现在你可以这样访问了

    class User < ABase
    
        def foo
          Apartment::Tenant.switch db_a
          #Do what you update in db_a
    
          Apartment::Tenant.switch db_b
          #Do what you update in db_b
        end
    
    end
    

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2014-01-13
      相关资源
      最近更新 更多