连接多个数据库导轨

时间:2015-01-02 06:43:18

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

需要基于客户端连接多个数据库。

我找到了一些解决方案来切换到模型中的另一个数据库,

在用户模型中,

class User < ActiveRecord::Base
  SupportBase.new.support_db_connection(self)
end
SupportBase.rb中的

class SupportBase 
  def support_db_connection(model_name) 
    db_connection(model_name) 
  end

private 

  def db_connection(model_name) 
    databases = YAML::load(IO.read('config/database_support.yml'))
    model_name.establish_connection(databases[Rails.env]) 
  end 
end

这有助于我切换到database_support数据库。

但我需要动态更改数据库名称。 如何将User模型中的database_name传递给该方法,

SupportBase.new.support_db_connection(self,database_name)

或者还有其他方法可以做到这一点。

3 个答案:

答案 0 :(得分:0)

将配置保存在一个地方 database.yml

development:
  adapter: postgresql
  other stuff...

production:
  adapter: postgresql
  other stuff..

external:
.....

然后创建一个类

class SupportBase < ActiveRecord::Base
  establish_connection(:external)
  self.table_name = "your_table"
end

然后您可以像

一样访问
SupportBase.first 

我认为这会保持备用数据库连接打开,这对性能也是一件好事,同时也允许你使用AR

On dynamic:在database.yml中创建尽可能多的环境,与类关联。你将有连接。

查看我的blog了解更多信息。

编辑:在DB上动态加载时,建议是,将新配置写入database.yml文件并重新加载文件

答案 1 :(得分:0)

如果您有两个数据库的详细信息,请使用活动的record.establish_connection方法在Rails中的两个数据库之间切换。

这是代码。

ActiveRecord::Base.establish_connection(
 :adapter  => "postgres",
 :host     => "host",
 :username => "myuser",
 :password => "mypass",
 :database => "somedatabase"
)

答案 2 :(得分:0)

使用 ar-octopus gem。这对于这种情况非常有用。