分片选择器中间件
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
}
方法
属性
[R] | 选项 | |
[R] | 解析器 |
类公共方法
new(app, resolver, options = {}) 链接
来源:显示 | 在 GitHub 上
# 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) 链接
来源:显示 | 在 GitHub 上
# 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