This code was taken from ActiveRecord 2.3.14's gem class ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
It seems each time ruby calls establish_connection
on the model, it's creating a new connection pool.
My question:
If I have 5 models that use establish_connection
to the same database, is Rails smart enough to pick an already existing pool rather creating a new one with the same connection credentials? Does this also happen if my 5 models are subclasses of some abstract class that uses establish_connection
? Will it always pick a connection from the @connection_pools
if it exists?
Update 1
I'm talking about a concrete example. You have 5 models with 5 different connections, each time Rails uses a model it executes establish_connection
. Looking at the code in ActiveRecord, when it executes establish_connection
it creates a new pool with connections to that specific connection. What I'm wondering is whether each time Rails calls a model's establish_connection
, does it create a new pool or take the existing one.
Example: you come to my site and see a product list. You've just hit an action that calls Product.all
, which executes establish_connection
to some database on Amazon. Then, I come to the product list, what happens? Do I grab the established connection or am I creating a new pool with that connection?
Update 2
My guess is that first time Rails loads my models it's creating pools with different connections. After, when I use some Model.method
, it just grabs the connection associated with the model and executes the method.
I'm not sure what happens when 2 models have two equal connections (not in the abstract class but in self class). Will this produce two same connection pools, or is ActiveRecord smart enough to catch this case?