establish_connection作品這段代碼是從ActiveRecord的2.3.14的寶石類ConnectionHandler
瞭解如何在ActiveRecord的
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個不同連接的模型,每次Rails使用它執行的模型establish_connection
。查看ActiveRecord中的代碼,當它執行establish_connection
時,它會創建一個連接到該特定連接的新池。我想知道的是每次Rails調用模型的establish_connection
時,它是否會創建一個新的池或採用現有的池。
例如:您來到我的網站並查看產品列表。您剛剛執行了一項操作,稱爲Product.all
,該操作會在亞馬遜的某個數據庫上執行establish_connection
。然後,我來到產品清單,會發生什麼?我是否抓住已建立的連接,或者是否創建了具有該連接的新池?
更新2
我的猜測是,第一次的Rails加載我的模型它創建具有不同的連接池。之後,當我使用一些Model.method
時,它只抓取與模型相關的連接並執行該方法。
我不確定當2個模型有兩個相等的連接(不在抽象類中,但在自我類中)會發生什麼。這會產生兩個相同的連接池,還是ActiveRecord足夠聰明,可以捕捉到這種情況?
順便說一句,很好的問題。 – bor1s