Я столкнулся с проблемой, которая, кажется, может быть связана с вложенными транзакциями, чтобы попытаться избавиться от идеи, что это может быть некоторая странность, связанная с транзакциями, о которых я не знаю, я хотел бы знать, их предостережения, которые могут помешать успешному завершению транзакции или привести к невозможности сохранения данных без появления ошибки?
примечания:
- У нас есть типовая транзакция внутри
ActiveRecord::Base
транзакции
- все наши тесты проходят без проблем, проблема только возникает в производстве
- Никаких исключений не возникает, и весь код транзакции выполняется нормально, включая действия, связанные с БД
- в данном примере данные, которые не удалось сохранить, находятся в блоке
User.transaction
- Бегаем по пуме
- Мы используем postgresql
- используем герою
Пример: * * тысяча двадцать-пять
payment.rb
class Payment < ApplicationRecord
belongs_to :payer, class_name: 'User'
belongs_to :recipient, class_name: 'User'
def apply_user_balances!
User.transaction do
payer.lock!
recipient.lock!
payer.credit += amount
recipient.credit -= amount
payer.save!
recipient.save!
end
end
end
payment_service.rb
class PaymentService
def self.apply_payment(payment)
ActiveRecord::Base.transaction do
payment.apply_user_balances!
end
end
end