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

时间:2017-04-09 07:32:11

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

我有一个带有多个数据库连接的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

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

1 个答案:

答案 0 :(得分:0)

Multitenancy for Rails and ActiveRecord

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

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