Rails 具有多个数据库连接的应用程序

Rails application with multiple database connections

我有一个 Rails 实例,该实例具有多个数据库连接,可提供两种不同的服务。假设它服务于服务A服务B。服务A需要连接到数据库A'和服务B 需要连接到数据库 B'A'B' 中的大多数 table 是相同的(table 名称、架构)。例如。数据库 A'B' 都有一个具有相同架构的 table 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 中的这种情况,从而最大限度地减少代码重复?

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