gpt4 book ai didi

ruby-on-rails - 如何强制 Rails ActiveRecord 提交事务刷新

转载 作者:行者123 更新时间:2023-12-04 02:07:36 28 4
gpt4 key购买 nike

是否可以强制 ActiveRecord 推送/刷新事务(或只是保存/创建)?

我有一个时钟 worker ,它在后台为几个任务 worker 创建任务。问题是,时钟 worker 有时会在时钟 worker 信息完全刷新到数据库之前创建一个任务并将其推送给任务 worker ,这会导致丑陋的竞争条件。

由于产品的架构和任务的生成方式,使用 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是最好的答案,即使需要稍微调整代码才能使其工作。如果它肯定不起作用,那么这两种方法应该会有所帮助。

关于ruby-on-rails - 如何强制 Rails ActiveRecord 提交事务刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574997/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com