Ash*_*ury 5 ruby-on-rails redis sidekiq
我已经将sidekiq设置为after_commit运行,但是使用失败了(接近)100%ActiveRecord::RecordNotFound: Couldn't find User with id=42635
。
在最长的时间内,我认为它已连接到错误的redis数据库,但是retry: true
打开后,我发现它最终会在大约10分钟后成功。
这很奇怪,因为我可以在管理面板中看到我们的用户ID失败,但是sidekiq仍然会失败一段时间,然后最终重试即可。我不知道是什么原因造成的,我想让它在第一次尝试中成功。
编辑: 使用AWS,下面的示例sidekiq调用和worker:
在UserObserver中:
def after_commit(user)
if user.created_at == user.updated_at
@user = user
identify_and_track
end
Run Code Online (Sandbox Code Playgroud)
...
def identify_and_track
IdentifyAndTrackUserWorker.perform_async(@user.id)
end
Run Code Online (Sandbox Code Playgroud)
Sidekiq工作人员:
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
Run Code Online (Sandbox Code Playgroud)
我遇到过与此非常相似的问题,并且发现 Sidekiq 因其快速性而在 Rails 能够创建对象之前执行了该作业。为了防止 sidekiq 失败,它是帮助器,给 Rails 时间来创建对象。
使用IdentifyAndTrackUserWorker.perform_in(1.minute, @user.id)
而不是IdentifyAndTrackUserWorker.perform_async(@user.id)
.
归档时间: |
|
查看次数: |
541 次 |
最近记录: |