如何访问rails 3.1.0 app中的多个数据库?

时间:2012-04-04 13:45:50

标签: mysql ruby-on-rails ruby ruby-on-rails-3.1

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

2 个答案:

答案 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应用程序。如果您需要隔离某些数据   基于帐户或公司,但仍允许一些数据存在于   公共数据库,公寓可以提供帮助。