module DatabaseErrorHandler
Constants
- VERSION
Public Instance Methods
handle_db_errors(retry_count: 3) { || ... }
click to toggle source
# File lib/database_error_handler.rb, line 20 def handle_db_errors(retry_count: 3) ActiveRecord::Base.transaction do yield end rescue ActiveRecord::ConnectionTimeoutError => e retry if (retry_count -= 1) > 0 raise e rescue ActiveRecord::StatementInvalid => e # mysql2 errors are wrapped into ActiveRecord::StatementInvalid case e.message when /Duplicate entry/ # do nothing when /Deadlock/, /Lock wait timeout exceeded/ retry if (retry_count -= 1) > 0 else raise e end false end
handle_duplicate_entry(idempotent: false) { || ... }
click to toggle source
# File lib/database_error_handler.rb, line 10 def handle_duplicate_entry(idempotent: false) yield rescue Mysql2::Error, ActiveRecord::StatementInvalid => e if e.message =~ /Duplicate entry/ retry if idempotent else raise e end end