Sidekiq和devise-async RecordNotFound

时间:2014-03-19 23:34:35

标签: ruby-on-rails devise sidekiq

ActiveRecord::RecordNotFound: Couldn't find User with id=42606 [WHERE ("users".deleted_at IS NULL)]

devise_async.rb:

Devise::Async.backend = :sidekiq
Devise::Async.queue = :mailer

sidekiq.rb:

if Rails.env.production?
  Sidekiq.configure_server do |config|
    config.redis = { url: 'redis://production-redis.xxxxxx.0001.usw2.cache.amazonaws.com', :namespace => 'sidekiq_prod' }
  end

  Sidekiq.configure_client do |config|
    config.redis = { url: 'redis://production-redis.xxxxxx.0001.usw2.cache.amazonaws.com', :namespace => 'sidekiq_prod' }
  end

我还有其他工作人员将内容发送到有效的segment.io,但设计人员并未发送我的欢迎电子邮件或密码重置电子邮件,因为它无法找到用户。我认为它连接到错误的数据库,但我不确定。

我很感激任何指示我为什么找不到我的用户的正确方向。

1 个答案:

答案 0 :(得分:1)

我好几个月以来一直在努力解决这个零星的问题。实际上我已经将这个用于resque。

我的幸运猜测是:当用户注册并且刚刚保存用户模型时,工作会被触发。但Sidekiq作业已经尝试加载应该在数据库中的用户,但可能是user.save发生的db-transaction,似乎还没有提交。

因此,当我尝试重现此问题时,会有一个具有给定ID的用户,也许这就是为什么您没有在deleted_at中设置任何时间戳。

我会尝试以5-10秒的轻微延迟运行欢迎邮件,并检查是否仍然会发生这种情况。

亲切的问候