Class: Fly::RegionalDatabase::DbExceptionHandlerMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/fly-ruby/regional_database.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ DbExceptionHandlerMiddleware

Returns a new instance of DbExceptionHandlerMiddleware.



29
30
31
# File 'lib/fly-ruby/regional_database.rb', line 29

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/fly-ruby/regional_database.rb', line 33

def call(env)
  exceptions = Fly.configuration.replayable_exception_classes
  @app.call(env)
rescue *exceptions, ActiveRecord::RecordInvalid => e
  if exceptions.any? {|ex| e.is_a?(ex) } || exceptions.any? { e&.cause&.is_a?(e) }
    RegionalDatabase.replay_in_primary_region!(state: "captured_write")
  else
    raise e
  end
end