Spec-Zone.ru › Ruby on Rails 7.2

класс ActiveRecord::Middleware::ShardSelector

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

Средства выбора фрагмента

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

Средства ShardSelector принимают набор параметров (в настоящее время поддерживается только lock), которые могут использоваться средствами для изменения поведения. lock по умолчанию имеет значение true и запрещает переключение фрагментов после входа в блок. Если lock имеет значение false, то переключение фрагментов разрешено. Для фрагментации на основе арендатора lock всегда должно быть true, чтобы предотвратить ошибочное переключение между арендаторами кодом приложения.

Параметры можно задать в конфигурации:

config.active_record.shard_selector = { lock: true }

Приложения также должны предоставить код для решателя, так как он зависит от моделей, специфичных для приложения. Пример решателя будет выглядеть следующим образом:

config.active_record.shard_resolver = ->(request) {
  subdomain = request.subdomain
  tenant = Tenant.find_by_subdomain!(subdomain)
  tenant.shard
}

Атрибуты

options[R]
resolver[R]

Публичные методы класса

new(app, resolver, options = {}) Показать исходный код
# File activerecord/lib/active_record/middleware/shard_selector.rb, line 32
def initialize(app, resolver, options = {})
  @app = app
  @resolver = resolver
  @options = options
end

Публичные методы экземпляра

call(env) Показать исходный код
# File activerecord/lib/active_record/middleware/shard_selector.rb, line 40
def call(env)
  request = ActionDispatch::Request.new(env)

  shard = selected_shard(request)

  set_shard(shard) do
    @app.call(env)
  end
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API