класс ActiveRecord::Middleware::DatabaseSelector
Класс DatabaseSelector Middleware предоставляет фреймворк для автоматической смены подключения к основной и реплицированной базе данных. Rails предоставляет базовый фреймворк для определения момента смены и позволяет приложениям писать пользовательские стратегии для переопределения стандартного поведения.
Класс-резолвер определяет, когда приложение должно переключаться (например, читать из основной, если запись была произведена менее 2 секунд назад), и класс контекста резолвера, который устанавливает значение, помогающее классу резолвера определить, когда переключаться.
Стандартный middleware Rails использует сессию запроса для установки отметки времени, которая сообщает приложению, когда читать из основной или реплицированной базы данных.
Чтобы использовать DatabaseSelector в вашем приложении с настройками по умолчанию, добавьте следующие параметры в конфигурацию вашей среды:
# This require is only necessary when using `rails new app --minimal`
require "active_support/core_ext/integer/time"
class Application < Rails::Application
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
Новые приложения будут включать эти строки с комментариями в production.rb.
Стандартное поведение может быть изменено путем установки параметров конфигурации на пользовательский класс:
config.active_record.database_selector = { delay: 2.seconds }
config.active_record.database_resolver = MyResolver
config.active_record.database_resolver_context = MyResolver::MySession
Атрибуты
Общедоступные методы класса
# File activerecord/lib/active_record/middleware/database_selector.rb, line 43
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 Общедоступные методы экземпляра
# File activerecord/lib/active_record/middleware/database_selector.rb, line 54
def call(env)
request = ActionDispatch::Request.new(env)
select_database(request) do
@app.call(env)
end
end Middleware который определяет, какое подключение к базе данных использовать в приложении с несколькими базами данных.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.