-
Notifications
You must be signed in to change notification settings - Fork 3
/
railtie.rb
40 lines (34 loc) · 1.38 KB
/
railtie.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# frozen_string_literal: true
module RailsFailover
module ActiveRecord
class Railtie < ::Rails::Railtie
initializer "rails_failover.init", after: "active_record.initialize_database" do |app|
app.config.active_record_rails_failover = false
config = RailsFailover::ActiveRecord.config
next unless config[:replica_host] && config[:replica_port]
app.config.active_record_rails_failover = true
::ActiveSupport.on_load(:active_record) do
begin
::ActiveRecord::Base.connection
rescue ::ActiveRecord::NoDatabaseError
# Do nothing since database hasn't been created
rescue ::PG::Error, ::ActiveRecord::ConnectionNotEstablished
Handler.instance.verify_primary(RailsFailover::ActiveRecord.writing_role)
end
end
end
initializer "rails_failover.insert_middleware" do |app|
next unless app.config.active_record_rails_failover
ActionDispatch::DebugExceptions.register_interceptor do |request, exception|
RailsFailover::ActiveRecord::Interceptor.handle(request, exception)
end
if !skip_middleware?(app.config)
app.middleware.unshift(RailsFailover::ActiveRecord::Middleware)
end
end
def skip_middleware?(config)
config.try(:skip_rails_failover_active_record_middleware)
end
end
end
end