Spec-Zone.ru › Ruby on Rails 6.1

класс ActiveRecord::Middleware::DatabaseSelector

Родитель:
Object

Класс DatabaseSelector Middleware предоставляет фреймворк для автоматической смены соединения с основной и реплицированной базой данных. Rails предоставляет базовый фреймворк для определения момента смены и позволяет приложениям писать пользовательские классы стратегий для переопределения стандартного поведения.

Класс-резолвер определяет, когда приложение должно переключаться (например, читать из основной базы, если запись произошла менее 2 секунд назад), и класс контекста резолвера, который устанавливает значение, помогающее классу резолвера определить, когда переключаться.

Стандартный миддлвар Rails использует сессию запроса для установки временной метки, которая сообщает приложению, когда следует читать из основной или реплицированной базы.

Для использования DatabaseSelector в вашем приложении со стандартными настройками добавьте следующие параметры в конфигурацию вашей среды:

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

В новых приложениях эти строки будут прокомментированы в файле 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 38
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 49
def call(env)
  request = ActionDispatch::Request.new(env)

  select_database(request) do
    @app.call(env)
  end
end

Middleware который определяет, какое соединение с базой данных использовать в приложении с несколькими базами данных.

© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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