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.



27
28
29
# File 'lib/fly-ruby/regional_database.rb', line 27

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



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

def call(env)
  @app.call(env)
rescue PG::ReadOnlySqlTransaction, ActiveRecord::StatementInvalid => e
  if e.is_a?(PG::ReadOnlySqlTransaction) || e&.cause&.is_a?(PG::ReadOnlySqlTransaction)
    RegionalDatabase.replay_in_primary_region!(state: "captured_write")
  else
    raise e
  end
end