【问题标题】:Too fast confirmation mail job with Devise and confirmable使用 Devise 和可确认的太快的确认邮件工作
【发布时间】:2015-10-01 09:35:12
【问题描述】:

我有一个基本的导轨设置并使用可确认模块进行设计。 我已经覆盖了send_devise_notification 以使用ActionMailer,它使用ActiveJob 进行交付。

在我的环境配置中,我设置了config.active_job.queue_adapter = :sidekiq,以便我所有的 ActiveJobs 都在 sidekiq 上运行。

def send_devise_notification(notification, *args)
  devise_mailer.send(notification, self, *args).deliver_later
end

不幸的是,sidekiq 似乎太快了,并试图在数据库事务完成之前发送邮件,因此遇到了Account with id = ... not found。显然,Sidekiq 重试了这项工作,并且在某个时候成功了。

任何有相同问题或想法的人如何解决这个问题? deliver_laterwait 选项是不行的。

【问题讨论】:

  • 仅供通过搜索来到这里的人参考。这已在设计#4.1.0 中修复

标签: ruby-on-rails devise actionmailer sidekiq rails-activejob


【解决方案1】:

你需要使用devise-async gem。

gem 'devise-async'

并在用户模型中添加:async

class User < ActiveRecord::Base
  devise :database_authenticatable, :async, :confirmable # etc ...
end

在 gem homepage 上查看更多详细信息。

【讨论】:

  • 我需要用吗? send_devise_notification 无论如何都被 after_commit 迷住了,并且它被覆盖以通过 ActiveJob/ActionMailer 使用 sidekq。我认为使用这个包装器 gem 没有什么意义。
猜你喜欢
  • 2015-04-09
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多