[英]How to create a new ActiveRecord Connection Pool with Ruby on Rails?
我有一個RoR應用程序,適用於主要的RoR數據庫。 我還想以一種方式連接到任意數據庫,這樣我就不會為每個新的HTTP請求重新創建數據庫連接。 根據我的研究,它看起來像連接池是要走的路。
但是,我無法弄清楚如何創建池本身:
config = ActiveRecord::ConnectionAdapters::ConnectionSpecification.new( {
"adapter" => "postgresql",
"host" => "localhost",
"port" => 9000,
"database" => "foo_test",
"username" => "foo",
"password" => "bar",
"pool" => "5",
"timeout" => "3000"
})
my_connection_pool = ActiveRecord::ConnectionAdapters::ConnectionPool.new(config)
NameError的錯誤:未初始化的常量ActiveRecord :: ConnectionAdapters :: ConnectionSpecification。 Interstingly ActiveRecord :: ConnectionAdapters :: ConnectionPool工作正常(但沒有正確的配置對象)。
我該怎么辦?
而且,這些是用來解決我的問題的正確方法嗎?
根據您的使用情況,Rails可能會自動為您執行此操作。 每個ActiveRecord::Base
子類都會查找繼承鏈以查找其池,因此
class Foo < ActiveRecord::Base
end
使用ActiveRecord::Base
連接池,但是
class Bar < ActiveRecord::Base
establish_connection database: 'some_other_db'
end
class BarSub < Bar
end
將使用Bar
池連接到'some_other_db'。
我不記得確切,但我想每次使用ActiveRecord::Base.establish_connection
(或任何子類的establish_connection
)時,它都會創建一個新池。 否則將是荒謬的!
我只是在我的初始化程序中有一個單獨的文件,用於創建多個連接。 lib文件是:
require 'active_record'
module whateverName
def self.included(klass)
klass.extend(ClassMethods)
end
module ClassMethods
def base(dbName)
establish_connection(ActiveRecord::Base.configurations[dbName.to_s][Rails.env])
end
end
end
將該文件保存在lib中,並在模型中包含此文件並傳遞數據庫類型。 確保database.yml具有所需的配置。 模型將是這樣的:
class Bar < ActiveRecord::Base
include whateverName
base :oracle
end
您需要擁有的只是database.yml中的oracle配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.