Должен объяснить ситуацию
код был взят из класса gem ActiveRecord 2.3.14ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
Кажется, каждый раз, когда рубин звонит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 модели имеют две равные связи (не в абстрактном классе, а в собственном классе). Создаст ли это два одинаковых пула соединений, или ActiveRecord достаточно умен, чтобы поймать это дело?