我有一个基本的导轨设置和设计可确认模块。
我已覆盖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}}选项是不行的。
答案 0 :(得分:0)
您需要使用devise-async
gem。
gem 'devise-async'
并在用户模型中添加:async
:
class User < ActiveRecord::Base
devise :database_authenticatable, :async, :confirmable # etc ...
end
查看有关gem homepage的更多详情。