gpt4 book ai didi

ruby-on-rails - Sidekiq 在成功之前经历了很多失败

转载 作者:IT王子 更新时间:2023-10-29 05:58:32 28 4
gpt4 key购买 nike

我已将 sidekiq 设置为运行 after_commit,但它在(接近)100% 的时间内都失败了 ActiveRecord::RecordNotFound: Couldn't find User with id=42635 .

最长的时间我以为是连接错了redis数据库,但是用retry: true打开我发现它最终在大约 10 分钟后成功。

这很奇怪,因为我可以在管理面板中看到我们的用户的 ID 失败了,但是 sidekiq 仍然会失败一段时间,然后最终重试会成功。我不知道是什么原因造成的,我希望它在第一次尝试时就成功。

编辑:使用 AWS,示例 sidekiq 调用和工作人员如下:

在 UserObserver 中:

  def after_commit(user)
if user.created_at == user.updated_at
@user = user
identify_and_track
end

...

def identify_and_track
IdentifyAndTrackUserWorker.perform_async(@user.id)
end

Sidekiq worker :

class IdentifyAndTrackUserWorker
include Sidekiq::Worker
sidekiq_options retry: true

def perform(user_id)
@user = User.find user_id
Analytics.identify(
user_id: user_id,
traits: { email: @user.email,
first_name: @user.first_name,
last_name: @user.last_name
}
)
end
end

最佳答案

我遇到过与这个问题非常相似的问题,并且发现 Sidekiq 以其快速的特性在 Rails 能够创建对象之前执行作业。为了防止 sidekiq 失败,让 Rails 有时间创建对象是有帮助的。

使用 IdentifyAndTrackUserWorker.perform_in(1.minute, @user.id) 而不是 IdentifyAndTrackUserWorker.perform_async(@user.id)

关于ruby-on-rails - Sidekiq 在成功之前经历了很多失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569941/

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