将rails应用程序连接到许多数据库

时间:2011-05-15 11:52:28

标签: database ruby-on-rails-3

假设我有用户,每个用户都属于某个群组。出于安全原因,我想为每个组分别设置数据库。我想象对象User和Group存储在一个中央数据库中,并且对该数据库执行身份验证,但所有其他对象动态连接到Group对象中定义的不同数据库。

所以问题是:如何根据某些参数(例如dbname)动态连接到我的对象的不同数据库?

2 个答案:

答案 0 :(得分:1)

你可以使用类方法“establish_connection”,但说实话,我不知道每次你需要时是否可以动态调用它。我将它用于以这种方式连接到不同数据库的模型:

class SomeModel < ActiveRecord::Base
  establish_connection "second_#{Rails.env}"
end

database.yml中:

development:
  adapter: mysql2
  username: web
  password:
  database: first_db
  pool: 5

second_development:
  ...
  database: second_db
  pool: 5

据我所知,使用包含来自database.yml的参数的Hash也可以正确调用建立连接,例如

establish_connection { :username => "web", :database => "..." }

但是如果你这样做,我不知道这是否会使用连接池。

当我在rails之外编写脚本时(我只使用包含activerecord的纯ruby),我也会使用它,然后我手动连接到db。

我希望这会有所帮助。

问候,NoICE

答案 1 :(得分:0)

使用我创建的MultiConfig gem来简化这一过程。

您可以在单独的文件中指定配置,例如second.yml等,然后调用:

ActiveRecord::Base.config_file = 'second' # for all models

SomeModel < ActiveRecord::Base
    self.config_file = 'second'
end

通过这种方式,维护和清洁看起来会更容易。