数据库选择中间件¶ ↑
The DatabaseSelector Middleware 提供了一个框架,用于自动在主数据库和副本数据库连接之间进行切换。Rails 提供了一个基本的框架来确定何时进行切换,并允许应用程序编写自定义策略类来覆盖默认行为。
解析器类定义了应用程序何时应切换(例如,如果在不到 2 秒前发生写入,则从主数据库读取),以及一个解析器上下文类,该类设置一个值,帮助解析器类决定何时切换。
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。
方法
Attributes
| [R] | context_klass | |
| [R] | options | |
| [R] | resolver_klass |
类公共方法
new(app, resolver_klass = nil, context_klass = nil, options = {}) Link
# 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
实例公共方法
call(env) Link
Middleware,用于在多数据库应用程序中确定使用哪个数据库连接。