Spec-Zone.ru › Ruby on Rails 7.1

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

Родитель:
Объект

Средство выбора базы данных

Средство 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

Атрибуты

context_klass[Ч]
options[Ч]
resolver_klass[Ч]

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

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