Я пытаюсь обновить гем ActiveRecord до последней версии 3.1.0 и вижу много исключений, я думаю, это связано с тем, как мы работаем с несколькими базами данных.
Для каждой из наших баз данных мы указываем отдельный базовый класс, который наследуется от ActiveRecord::Base
, и вызываем там establish_connection
. Нет никаких связей между базами данных. До сих пор это работало хорошо для нас.
После обновления до ActiveRecord 3.1.0, я вижу, что происходит сбой с исключением ActiveRecord::ConnectionNotEstablished
при обходе отношений (т. Е. Он успешно извлекает один объект или их набор из БД, но не удается при переходе к родственный класс).
Верхняя строка следа - C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in 'retrieve_connection'
, поэтому я немного углубился в это. Метод определяется следующим образом:
def retrieve_connection(klass) #:nodoc:
pool = retrieve_connection_pool(klass)
(pool && pool.connection) or raise ConnectionNotEstablished
end
Мой простой тест (puts Customer.first.address
) вызывает retrieve_connection
3 раза. Дважды с Customer
в качестве параметра klass
и один раз с ActiveRecord::Base
в качестве параметра - когда происходит сбой, так как establish_connection
не был вызван для ActiveRecord::Base
.
К актуальному вопросу тогда - есть ли новый рекомендуемый способ обработки нескольких соединений с базой данных в ActiveRecord? Если так, что это?
Если нет, то что может быть причиной этой проблемы?