是否可以强制 ActiveRecord 推送/刷新事务(或只是保存/创建)?
我有一个时钟工作人员,它在后台为多个任务工作人员创建任务。问题是,时钟工作人员有时会在时钟工作人员信息完全刷新到数据库之前创建一个任务并将其推送给任务工作人员,这会导致丑陋的竞争条件。
由于产品的架构以及任务的生成方式,使用 after_commit 并不真正可行。
简而言之,我需要能够让一名工作人员创建一项任务并将该任务刷新到数据库。
ActiveRecord 使用#transaction
创建一个开始并回滚或提交事务的块。我相信这会对您的问题有所帮助。本质上(假设 Task 是一个 ActiveRecord 类):
Task.transaction do
new_task = Task.create(...)
end
BackgroundQueue.enqueue(new_task)
您也可以直接前往#connection
下面有:
Task.connection.commit_db_transaction
不过,这有点低级,您必须对代码的使用方式非常有信心。#after_commit
是最好的答案,即使需要对代码进行一些调整才能使其工作。如果它肯定不起作用,那么这两种方法应该会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)