Spec-Zone.ru › Ruby on Rails 8.1

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

Родитель:
Object

Промежуточное ПО для выбора базы данных

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

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

Промежуточное ПО 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

Атрибуты

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

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

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

Spec-Zone.ru

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