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
我有一个 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