在我们的rails 3.1.0应用程序中,我们希望根据用户凭据访问多个数据库。有多种解决方案。一种是为每个用户安装一个应用程序,每个应用程序只访问一个数据库。问题是,如果有许多数据库(例如数百个),则应用程序安装数量相同。维护大量应用程序可能很麻烦。另一种方法是访问应用程序中的多个数据库。然而,这种方法似乎不容易在rails 3.1.0中得到支持。当然,应用程序中会有一个代码来决定为刚刚登录的用户访问哪个数据库。有人可以提供有关该方法的优缺点的解决方案和见解吗?非常感谢。
答案 0 :(得分:5)
您应该能够使用ActiveRecord::Base.establish_connection
在特定上下文中动态连接到您喜欢的任何数据库。如何实现它完全是特定于应用程序的,但Rails确实具有此功能。
这是一个非常人为的例子:
class User
def books
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => self.username,
:password => self.password,
:database => self.database
)
Book.all
rescue Exception => e
# ...
end
end
您可能希望进行实际的错误处理,并且可能在实例方法之外的某处建立连接,但这取决于您自己决定。
答案 1 :(得分:3)
apartment gem可能正是您所寻找的:
Apartment提供了一些工具来帮助您处理多个数据库 你的Rails应用程序。如果您需要隔离某些数据 基于帐户或公司,但仍允许一些数据存在于 公共数据库,公寓可以提供帮助。