Должен объяснить ситуацию

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

Ответы на вопрос(3)

Ваш ответ на вопрос