4

在我们的 rails 3.1.0 应用程序中,我们希望根据用户凭据访问多个数据库。有多种解决方案。一种是为每个用户安装一个应用程序,每个应用程序只访问一个数据库。问题是,如果有很多数据库(例如数百个),那么应用程序安装的数量就会相等。维护大量应用程序可能很麻烦。另一种方法是访问应用程序内的多个数据库。然而,这种方法在 rails 3.1.0 中似乎并不容易支持。当然,应用程序中会有一个代码来决定刚刚登录的用户访问哪个数据库。有人可以提供有关该方法的优缺点的解决方案和见解吗?非常感谢。

4

2 回答 2

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

您可能希望进行实际的错误处理,并可能在实例方法之外的某处建立连接,但这取决于您自己的决定。

于 2012-04-04T14:18:02.027 回答
3

公寓宝石可能正是您正在寻找的:

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

于 2012-04-23T18:47:00.773 回答