класс ActiveRecord::Middleware::DatabaseSelector
Промежуточное ПО для выбора базы данных
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
Атрибуты
Общедоступные методы класса
# 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.