跳至内容 跳至搜索

分片选择器中间件

The ShardSelector Middleware 提供了一个用于自动切换分片的框架。Rails 提供了一个基本的框架来确定要切换到的分片,并允许应用程序在需要时编写自定义策略来进行切换。

The 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
}
方法
C
N

属性

[R] 选项
[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