Этот код был взят из класса 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 достаточно умен, чтобы отловить этот случай?