我有一个模型(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方法为各个模型设置不同的数据库连接?
答案 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)
根据documentation,establish_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]
}