加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:06:07 所属栏目:百科 来源:网络整理
导读:我已经设置了sidekiq来运行after_commit,但它在100%的时间内使用ActiveRecord :: RecordNotFound失败(接近):无法找到id = 42635的用户. 在最长的时间里,我认为它连接到错误的redis数据库,但是重试:真的打开我发现它最终在大约10分钟后成功. 它非常奇怪,因
我已经设置了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
              }
    )
  end
end

解决方法

我遇到了与此问题非常相似的问题,并且发现Sidekiq在其快速的性质下,正在执行Rails能够创建对象之前的工作.为了防止sidekiq失败,让Rails有时间创建对象是很有帮助的.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读