Понимание того, как работает install_connection в ActiveRecord

Этот код был взят из класса gem ActiveRecord 2.3.14 ConnectionHandler

def establish_connection(name, spec)
  @connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end

Кажется, каждый раз, когда ruby ​​вызывает install_connection в модели, создается новый пул соединений .

Мой вопрос:

Если у меня есть 5 моделей, которые используют install_connection в одной базе данных, достаточно ли умен Rails, чтобы выбрать уже существующий пул, а не создать новый с теми же учетными данными для подключения? Произойдет ли это также, если мои 5 моделей являются подклассами некоторого абстрактного класса, который использует install_connection ? Всегда ли он выбирает соединение из @connection_pools , если оно существует?

Обновление 1

Я говорю о конкретном примере. У вас есть 5 моделей с 5 различными соединениями, каждый раз, когда Rails использует модель, она выполняет install_connection . Глядя на код в ActiveRecord, когда он выполняет install_connection , он создает новый пул с подключениями к этому конкретному соединению. Мне интересно, каждый раз, когда Rails вызывает модель install_connection , создает ли он новый пул или берет существующий.

Пример: вы заходите на мой сайт и видите список продуктов. Вы только что выполнили действие, вызывающее Product.all ,который выполняет install_connection к некоторой базе данных на Amazon. Затем я перехожу к списку продуктов, что происходит? Захватываю ли я установленное соединение или создаю новый пул с этим соединением?

Обновление 2

Я предполагаю, что в первый раз, когда Rails загружает мои модели, он создает пулы с разными соединениями. После, когда я использую какой-то Model.method , он просто захватывает соединение, связанное с моделью, и выполняет метод.

Я не уверен, что происходит, когда две модели имеют два равных соединения (не в абстрактном классе, а в собственном классе). Будет ли это создавать два одинаковых пула соединений или ActiveRecord достаточно умен, чтобы отловить этот случай?

33
задан theIV 25 August 2011 в 15:13
поделиться