класс 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
Атрибуты
Публичные методы класса
# 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.