我遇到Sidekiq没有找到DB记录的问题,我想这是因为在Sidekiq运行之前事务没有完全提交。我的印象是交易是在块内提交的:
User.transaction do
# db updates here
# commit or rollback
end
MyWorker.perform_async()
所以我的理解不正确,即使在阻止之后,数据库操作可能还没有完全提交?这就是我所看到的行为。我听说过after_commit
,但我正在使用服务对象,并希望将逻辑保留在那里。
答案 0 :(得分:0)
您的印象是正确的,事务在块结束时提交。如果MyWorker
依赖于块中的数据并且块提交,则在作业执行时它应该是可见的,因为作业是在块外部创建的。