Spec-Zone.ru › Ruby on Rails 7.2

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

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

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

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

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

Стандартный middleware 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