класс ActiveRecord::Middleware::DatabaseSelector
Средства DatabaseSelector Middleware обеспечивают основу для автоматической смены соединения с основной и репликой базы данных. Rails предоставляет базовый каркас для определения, когда необходимо менять соединение, и позволяет приложениям писать собственные стратегии классов, чтобы переопределить стандартное поведение.
Класс решателя определяет, когда приложение должно переключаться (например, читать из основной базы, если запись произошла менее 2 секунд назад), а класс контекста решателя устанавливает значение, которое помогает классу решателя определить, когда нужно переключаться.
Средства Middleware по умолчанию в 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
Атрибуты
Публичные методы класса
# 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 Публичные методы экземпляра
# 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 Средства для определения соединения с базой данных, которое нужно использовать в приложении с несколькими базами данных.
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.