資料庫選擇器中間件
DatabaseSelector
Middleware
提供自動切換主要資料庫與複本資料庫連線的架構。Rails 提供用於判斷何時切換的基本架構,並允許應用程式撰寫自訂策略類別以覆寫預設行為。
解析器類別定義應用程式應切換的時機 (例如,若寫入發生在不到 2 秒前,則從主要資料庫讀取),並設定有助於解析器類別判斷何時切換的值的解析器內容類別。
Rails 預設中間件使用要求的階段來設定時間戳,通知應用程式何時從主要資料庫讀取,以及何時從複本資料庫讀取。
若要使用應用程式中的 DatabaseSelector
和其預設設定,請執行提供的產生器。
$ bin/rails g active_record:multi_db
這會建立一個名為 config/initializers/multi_db.rb
的檔案,其中包含下列內容
Rails.application.configure do
config.active_record.database_selector = { delay: 2.seconds }
config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
end
或者您可以在開機時載入的環境設定或其他設定檔案中設定選項。
可以透過設定設定選項為自訂類別,來變更預設行為
config.active_record.database_selector = { delay: 2.seconds }
config.active_record.database_resolver = MyResolver
config.active_record.database_resolver_context = MyResolver::MySession
注意:如果您使用 rails new my_app --minimal
,則需要呼叫 require "active_support/core_ext/integer/time"
,以載入核心延伸模組才能使用 2.seconds
方法
屬性
[R] | context_klass | |
[R] | options | |
[R] | resolver_klass |
類別公開方法
new(app, resolver_klass = nil, context_klass = nil, options = {}) 連結
來源:顯示 | 在 GitHub 上
# File activerecord/lib/active_record/middleware/database_selector.rb, line 52 def initialize(app, resolver_klass = nil, context_klass = nil, options = {}) @app = app @resolver_klass = resolver_klass || Resolver @context_klass = context_klass || Resolver::Session @options = options end
執行個體公開方法
call(env) 連結
Middleware
,用於判斷在多個資料庫應用程式中要使用哪個資料庫連線。
來源:顯示 | 在 GitHub 上
# File activerecord/lib/active_record/middleware/database_selector.rb, line 63 def call(env) request = ActionDispatch::Request.new(env) select_database(request) do @app.call(env) end end