Spec-Zone.ru › Ruby on Rails 8.1

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

Родитель:
Object

Промежуточное ПО для выбора шарда

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

Настройка

Приложения должны предоставить резолвер, содержащий специфичную для приложения логику выбора подходящего шарда. Установка config.active_record.shard_resolver приведёт к тому, что Rails добавит ShardSelector в стек промежуточного ПО по умолчанию.

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

Rails.application.configure do
  config.active_record.shard_selector = { lock: false, class_name: "AnimalsRecord" }
  config.active_record.shard_resolver = ->(request) {
    subdomain = request.subdomain
    tenant = Tenant.find_by_subdomain!(subdomain)
    tenant.shard
  }
end

Конфигурация

Поведение ShardSelector можно изменить с помощью ряда параметров конфигурации.

lock:

lock по умолчанию имеет значение true и запрещает запросу переключать шарды внутри блока. Если lock имеет значение false, переключение шардов будет разрешено. При шардинге на основе арендаторов lock всегда должен иметь значение true, чтобы предотвратить случайное переключение кода приложения между арендаторами.

class_name:

class_name — это имя абстрактного класса подключения, который требуется переключить. По умолчанию ShardSelector будет использовать ActiveRecord::Base, но если приложение использует несколько баз данных, для этого параметра следует задать имя абстрактного класса подключения к базе данных с шардингом.

Атрибуты

options [R]
resolver [R]

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

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

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

call (env) Показать исходный код
# File activerecord/lib/active_record/middleware/shard_selector.rb, line 55
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