gpt4 book ai didi

mysql - rails : Sidekiq cannot find the created record

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:51 30 4
gpt4 key购买 nike

我正在使用 sidekiq 在创建记录后运行一些作业。当作业尝试查找具有已创建 ID 的记录时,在随机情况下会引发 RecordNotFound。这怎么可能?

class Person
def self.test_create
p = Person.create(
name: 'test'
)

p.run_on_sidekiq
end

def run_on_sidekiq
PersonJob.perform_async(self.id)
end
end

# Sidekiq runs on other server.
class PersonJob
def perform(id)
person = Person.find(id) # sometimes raises RecordNotFound!

# ...
# do something
# ...
end
end

编辑:根据 Alexei的回答,这个case跟Sidekiq关系比较大。编辑问题以添加有关 Sidekiq 用法的更多详细信息。

最佳答案

当您是 using Sidekiq in after_create 时,这是一个常见的情况钩子(Hook)。实际上发生的是 Sidekiq 在事务完成之前开始工作,这就是它无法在数据库中找到模型的原因(也因为它非常快)。您需要做的是将您的 after_create Hook 更改为 after_commit 以确保事务已完成。

如果您展示使用 Sidekiq 的确切代码,我可以详细说明您的具体用法。

更新:这很奇怪,您当前的代码应该没问题,因为已经调用了 save/destroy gets wrapped在交易中。

我能想到的一个原因是验证错误。如果您的 Person.create 调用以某种方式失败,您将返回一个 Person 实例,其中 id 将为 nil。这样,Sidekiq 将尝试查找带有 id=nil 的记录并抛出错误。

关于mysql - rails : Sidekiq cannot find the created record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604030/

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