Class: ActiveRecord::Middleware::DatabaseSelector::Resolver
- Defined in:
- activerecord/lib/active_record/middleware/database_selector/resolver.rb,
activerecord/lib/active_record/middleware/database_selector/resolver/session.rb
Overview
The Resolver class is used by the DatabaseSelector middleware to determine which database the request should use.
To change the behavior of the Resolver class in your application, create a custom resolver class that inherits from DatabaseSelector::Resolver and implements the methods that need to be changed.
By default the Resolver class will send read traffic to the replica if it’s been 2 seconds since the last write.
Defined Under Namespace
Classes: Session
Constant Summary collapse
- SEND_TO_REPLICA_DELAY =
2.seconds
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#delay ⇒ Object
readonly
Returns the value of attribute delay.
-
#instrumenter ⇒ Object
readonly
Returns the value of attribute instrumenter.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(context, options = {}) ⇒ Resolver
constructor
A new instance of Resolver.
- #read(&blk) ⇒ Object
- #write(&blk) ⇒ Object
Constructor Details
#initialize(context, options = {}) ⇒ Resolver
Returns a new instance of Resolver.
25 26 27 28 29 30 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 25 def initialize(context, = {}) @context = context @options = @delay = @options && @options[:delay] ? @options[:delay] : SEND_TO_REPLICA_DELAY @instrumenter = ActiveSupport::Notifications.instrumenter end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context
32 33 34 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 32 def context @context end |
#delay ⇒ Object (readonly)
Returns the value of attribute delay
32 33 34 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 32 def delay @delay end |
#instrumenter ⇒ Object (readonly)
Returns the value of attribute instrumenter
32 33 34 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 32 def instrumenter @instrumenter end |
Class Method Details
.call(context, options = {}) ⇒ Object
21 22 23 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 21 def self.call(context, = {}) new(context, ) end |
Instance Method Details
#read(&blk) ⇒ Object
34 35 36 37 38 39 40 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 34 def read(&blk) if read_from_primary? read_from_primary(&blk) else read_from_replica(&blk) end end |
#write(&blk) ⇒ Object
42 43 44 |
# File 'activerecord/lib/active_record/middleware/database_selector/resolver.rb', line 42 def write(&blk) write_to_primary(&blk) end |