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

ruby-on-rails – Sidekiq在成功之前失败了很多,第1张

概述我已经设置了sidekiq来运行after_commit,但它在100%的时间内使用ActiveRecord :: RecordNotFound失败(接近):无法找到id = 42635的用户. 在最长的时间里,我认为它连接到错误的redis数据库,但是重试:真的打开我发现它最终在大约10分钟后成功. 它非常奇怪,因为我可以在管理面板中看到我们的用户失败的id,但是sidekiq仍然会失败一段时间 我已经设置了sIDekiq来运行after_commit,但它在100%的时间内使用ActiveRecord :: RecordNotFound失败(接近):无法找到ID = 42635的用户.

在最长的时间里,我认为它连接到错误的redis数据库,但是重试:真的打开我发现它最终在大约10分钟后成功.

它非常奇怪,因为我可以在管理面板中看到我们的用户失败的ID,但是sIDekiq仍然会失败一段时间,然后最终重试将起作用.我不知道是什么造成了这种情况,我想在第一次尝试时让它成功.

编辑:
使用AWS,示例sIDekiq调用和worker下面:

在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工人:

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              }    )  endend
解决方法 我遇到了与此问题非常相似的问题,并且发现SIDekiq在其快速的性质下,正在执行Rails能够创建对象之前的工作.为了防止sIDekiq失败,让Rails有时间创建对象是很有帮助的.

使用IDentifyAndTrackUserWorker.perform_in(1.minute,@ user.ID)而不是IDentifyAndTrackUserWorker.perform_async(@ user.ID).

总结

以上是内存溢出为你收集整理的ruby-on-rails – Sidekiq在成功之前失败了很多全部内容,希望文章能够帮你解决ruby-on-rails – Sidekiq在成功之前失败了很多所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1269825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存