2010-01-06 42 views
1

我有一個模型(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> - 。錯誤我也試了一下沒有拉姆達,但是,這並不工作,要麼和我得到一個更加古怪的錯誤:

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

還是有更好的/ Rails的十歲上下的方式來設置各個車型不同的數據庫連接?

回答

3

小不同的方式,它的工作原理:

添加連接信息到正規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 ist嵌套在development之下。

message_importer.rb

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

仍然不知道爲什麼我的第一種方法沒有工作,但這樣做只是預期。

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] 
    } 
+0

Jup,我試了一下。但是通過這段代碼,我甚至得到了語法錯誤:http://pastie.org/768685 – 2010-01-06 12:21:11

+0

如果用字符串替換哈希中的符號會發生什麼,所以':adapter => APP_CONFIG ['external_messages'] ['adapter' ''等等? – 2010-01-06 12:38:34

+0

這給了我一個'當你沒有想到它時你有一個零對象! ' - 錯誤。找到一個解決方案將在一秒後發佈。 – 2010-01-06 12:58:49

相關問題