【问题标题】:Sidekiq and devise-async RecordNotFoundSidekiq 和设计异步 RecordNotFound
【发布时间】:2014-03-19 23:34:35
【问题描述】:
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 发送正在运行的东西,但 devise 没有发送我的欢迎电子邮件或密码重置电子邮件,因为它找不到用户。我认为它连接到了错误的数据库,但我不确定。

如果它无法找到我的用户,我将不胜感激。

【问题讨论】:

  • 还 - 用户表的 db-schema(特别是 deleted_at 默认值)? - 只是为了确保这不是一个简单的范围界定问题......
  • 'deleted_at IS NULL' 来自 paranoid gem,它允许您恢复已删除的记录。使用模型代码是什么意思?自从我提出这个问题以来,我一直注意到 sidekiq 重试最终会起作用.. 大约 10 分钟后。很奇怪。
  • 这应该是“用户模型代码”...但如果只是花一点时间,可能是网络速度慢和超时问题?
  • 会不会是这个问题? github.com/mperham/sidekiq/wiki/…

标签: ruby-on-rails devise sidekiq


【解决方案1】:

几个月以来,我也在为这个零星的问题苦苦挣扎。其实我也有这个已经用resque了。

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

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

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

亲切的问候

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 2013-04-08
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多