2012-04-04 79 views
4

在我们的Rails 3.1.0应用程序,我们希望访问基于用户凭据多个数据库。有多种解决方案。一种是为每个用户安装一个应用程序,每个应用程序只能访问一个数据库。问题是,如果有很多的数据库(如几百个),将有同等数量的应用程序的安装。维护大量的应用程序可能是一件麻烦事。另一种方法是访问应用程序内的多个数据库。然而这种方法在rails 3.1.0中似乎不太受支持。肯定会有应用程序中的代码来决定访问对谁只是登录用户的数据库。有人可以提供有关approache的优点和缺点的解决方案和见解?非常感谢。如何访问多个数据库中轨3.1.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 

你会想要做某个地方实际的错误处理,可能建立连接的实例方法之外,但一切由你来决定。

3

apartment gem可能正是你要寻找的:

公寓提供的工具可帮助您应对 Rails应用程序的多个数据库。如果你需要有一个基于帐户或公司的某些数据隔离 ,但仍允许一些数据在 常见的数据库存在,公寓可以提供帮助。

相关问题