Comprender cómo funciona establecer_conexión en ActiveRecord
Este código fue tomado de la clase de gemas de ActiveRecord 2.3.14ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
arece que cada vez que Ruby llama aestablish_connection
en el modelo, está creando un nuevo grupo de conexiones.
Mi pregunta
Si tengo 5 modelos que usanestablish_connection
a la misma base de datos, ¿Rails es lo suficientemente inteligente como para elegir un grupo ya existente en lugar de crear uno nuevo con las mismas credenciales de conexión? ¿Esto también sucede si mis 5 modelos son subclases de alguna clase abstracta que usaestablish_connection
? ¿Siempre elegirá una conexión de@connection_pools
¿si existiera
Update 1
Estoy hablando de un ejemplo concreto. Tienes 5 modelos con 5 conexiones diferentes, cada vez que Rails usa un modelo que ejecutaestablish_connection
. Mirando el código en ActiveRecord, cuando ejecutaestablish_connection
crea un nuevo grupo con conexiones a esa conexión específica. Lo que me pregunto es si cada vez que Rails llama a la modelo deestablish_connection
, ¿crea un nuevo grupo o toma el existente?
Ejemplo: vienes a mi sitio y ves una lista de productos. Acaba de golpear una acción que llama aProduct.all
, que ejecutaestablish_connection
a alguna base de datos en Amazon. Entonces, vengo a la lista de productos, ¿qué sucede? ¿Tomo la conexión establecida o estoy creando un nuevo grupo con esa conexión?
Update 2
Supongo que la primera vez que Rails carga mis modelos está creando grupos con diferentes conexiones. Después, cuando uso algunasModel.method
, solo toma la conexión asociada con el modelo y ejecuta el método.
No estoy seguro de qué sucede cuando 2 modelos tienen dos conexiones iguales (no en la clase abstracta sino en la clase propia). ¿Producirá esto dos grupos de conexiones iguales o es ActiveRecord lo suficientemente inteligente como para detectar este caso?