使用Devise和确认的确认邮件作业太快

时间:2015-10-01 09:35:13

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

我有一个基本的导轨设置和设计可确认模块。 我已覆盖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重试这项工作,并在某些时候取得成功。

任何有同样问题或想法的人如何解决这个问题? wait的{​​{1}}选项是不行的。

1 个答案:

答案 0 :(得分:0)

您需要使用devise-async gem。

gem 'devise-async'

并在用户模型中添加:async

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

查看有关gem homepage的更多详情。