класс 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
Атрибуты
Общедоступные методы класса
# 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 Общедоступные методы экземпляра
# 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.