Этот код был взят из ActiveRecord 2.3.14 gem class ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
Кажется, каждый раз ruby вызывает establish_connection
на модели, создавая новый пул соединений.
Мой вопрос:
Если у меня есть 5 моделей, которые используют establish_connection
в той же базе данных, достаточно ли Rails достаточно, чтобы выбрать уже существующий пул, а создать новый с теми же учетными данными? Это также происходит, если мои 5 моделей являются подклассами некоторого абстрактного класса, который использует establish_connection
? Всегда ли будет выбирать соединение с @connection_pools
, если оно существует?
Обновление 1
Я говорю о конкретном примере. У вас есть 5 моделей с 5 различными соединениями, каждый раз, когда Rails использует модель, она выполняет establish_connection
. Если посмотреть на код в ActiveRecord, когда он выполнит establish_connection
, он создаст новый пул с подключениями к этому конкретному соединению. Мне интересно, каждый раз Rails вызывает модель establish_connection
, создает ли новый пул или использует существующий.
Пример: вы приходите на мой сайт и видите список продуктов. Вы только что нажали на действие, которое вызывает Product.all
, которое выполняет establish_connection
в какой-либо базе данных на Amazon. Затем я прихожу к списку продуктов, что происходит? Ухватить ли я установленное соединение или создать новый пул с этим соединением?
Обновление 2
Я предполагаю, что Rails впервые загружает мои модели, создавая пулы с разными соединениями. После того, как я использую некоторый Model.method
, он просто захватывает соединение, связанное с моделью, и выполняет этот метод.
Я не уверен, что произойдет, когда 2 модели имеют два равных соединения (не в абстрактном классе, а в классе self). Будет ли это создавать два одинаковых пула соединений или достаточно ActiveRecord, чтобы поймать этот случай?