根据环境,个别型号的DB连接不同

时间:2010-01-06 11:17:08

标签: ruby-on-rails activerecord

我有一个模型(MessageImporter)使用self.establish_connection连接到不同于其他模型的数据库。当我传递硬编码的连接信息时,一切正常。现在我需要连接来依赖当前环境。所以我将信息添加到我的application_config.yml(这是一个简单的nifty_config)。我不知道如何将连接信息传递给self.establish_connection

这是我目前的代码:

class MessageImporter < ActiveRecord::Base
  self.establish_connection lambda {{
    :adapter => APP_CONFIG[:external_messages][:adapter],
    :host => APP_CONFIG[:external_messages][:host],
    :database => APP_CONFIG[:external_messages][:database],
    :username => APP_CONFIG[:external_messages][:username],
    :password => APP_CONFIG[:external_messages][:password]
  }}

# […]

我得到undefined method 'symbolize_keys' for #<Proc:0x2564224> - 。错误我也尝试了没有lambda,但这也不起作用,我得到一个更奇怪的错误:

Please install the  adapter: `gem install activerecord--adapter` (no such file to load -- active_record/connection_adapters/_adapter)

或者是否有更好的/ Rails-ish方法为各个模型设置不同的数据库连接?

2 个答案:

答案 0 :(得分:4)

几乎没有什么方法可行:

将连接信息添加到常规database.yml

development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: […]
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

  message_import:
    adapter: mysql
    encoding: utf8
    username: […]
    password: […]
    database: […]
    host: […]

注意嵌套! message_import嵌套在development下面。

message_importer.rb

class MessageImporter < ActiveRecord::Base
  establish_connection configurations[RAILS_ENV]['message_import'] 

仍然想知道为什么我的第一种方法不起作用,但这与预期一样。

答案 1 :(得分:0)

根据documentationestablish_connection方法接受哈希作为输入。你试过这个吗? -

class MessageImporter < ActiveRecord::Base
  establish_connection {
    :adapter => APP_CONFIG[:external_messages][:adapter],
    :host => APP_CONFIG[:external_messages][:host],
    :database => APP_CONFIG[:external_messages][:database],
    :username => APP_CONFIG[:external_messages][:username],
    :password => APP_CONFIG[:external_messages][:password]
  }