class Fly::RegionalDatabase::DbExceptionHandlerMiddleware

Public Class Methods

new(app) click to toggle source
# File lib/fly-ruby/regional_database.rb, line 27
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# 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