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



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

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

>您可以使用类方法"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 参数的哈希调用,例如

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

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

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

我希望这有所帮助。

问候, NoICE

使用我创建的 MultiConfig gem 来简化此操作。

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

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

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

这样,它将更容易维护和更清洁。

相关内容

  • 没有找到相关文章

最新更新