Различное соединение с БД для отдельной модели в зависимости от среды - PullRequest
1 голос
/ 06 января 2010

У меня есть модель (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-ish способ установить другое db-соединение для отдельных моделей?

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Немного другой подход, и это работает:

Добавление информации о соединении к обычному 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'] 

Все еще задаюсь вопросом, почему мой первый подход не сработал, но он работает так, как ожидалось.

0 голосов
/ 06 января 2010

Согласно документации , метод establish_connection принимает хэш в качестве входных данных. Вы пробовали это? & Mdash;

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]
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...