Compreender como o estabelecer_connection funciona no ActiveRecord
Este código foi retirado da classe gem do ActiveRecord 2.3.14ConnectionHandler
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
Parece que cada vez que o ruby chamaestablish_connection
no modelo, ele está criando um novo pool de conexõe
Minha pergunta
Se eu tiver 5 modelos que usamestablish_connection
para o mesmo banco de dados, o Rails é inteligente o suficiente para escolher um pool já existente, em vez de criar um novo com as mesmas credenciais de conexão? Isso também acontece se meus 5 modelos são subclasses de alguma classe abstrata que usaestablish_connection
? Ele sempre escolhe uma conexão do@connection_pools
se existir?
Update 1
Estou falando de um exemplo concreto. Você tem 5 modelos com 5 conexões diferentes, cada vez que o Rails usa um modelo que ele executaestablish_connection
. Observando o código no ActiveRecord, quando ele executaestablish_connection
ele cria um novo pool com conexões para essa conexão específica. O que estou querendo saber é se cada vez que o Rails chama umestablish_connection
, ele cria um novo pool ou aceita o existente.
Exemplo: você vem ao meu site e vê uma lista de produtos. Você acabou de executar uma ação que chamaProduct.all
, que executaestablish_connection
para algum banco de dados na Amazon. Então, eu venho para a lista de produtos, o que acontece? Pego a conexão estabelecida ou estou criando um novo pool com essa conexão?
Update 2
Meu palpite é que, pela primeira vez, o Rails carrega meus modelos, criando pools com conexões diferentes. Depois, quando eu uso alguModel.method
, apenas pega a conexão associada ao modelo e executa o métod
Não sei ao certo o que acontece quando dois modelos têm duas conexões iguais (não na classe abstrata, mas na classe própria). Isso produzirá dois mesmos conjuntos de conexões ou o ActiveRecord é inteligente o suficiente para capturar esse caso?