Spec-Zone.ru › Ruby on Rails 7.0

класс 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

Атрибуты

context_klass[R]
options[R]
resolver_klass[R]

Общедоступные методы класса

new(app, resolver_klass = nil, context_klass = nil, options = {}) Показать исходный код
# 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

Общедоступные методы экземпляра

call(env) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API