在 2019 年,由于device-async不是最新的,并且如果您有 ActiveJob 和 sidekiq 设置,请在此处完成文档。最简单的解决方案是覆盖与事务邮件相关的设备send_devise_notification实例方法,如下所示
class User < ApplicationRecord
  # whatever association you have here
  devise :database_authenticatable, :confirmable
  after_commit :send_pending_devise_notifications
  # whatever methods you have here
 protected
  def send_devise_notification(notification, *args)
    if new_record? || changed?
      pending_devise_notifications << [notification, args]
    else
      render_and_send_devise_message(notification, *args)
    end
  end
  private
  def send_pending_devise_notifications
    pending_devise_notifications.each do |notification, args|
      render_and_send_devise_message(notification, *args)
    end
    pending_devise_notifications.clear
  end
  def pending_devise_notifications
    @pending_devise_notifications ||= []
  end
  def render_and_send_devise_message(notification, *args)
    message = devise_mailer.send(notification, self, *args)
    # Deliver later with Active Job's `deliver_later`
    if message.respond_to?(:deliver_later)
      message.deliver_later
    # Remove once we move to Rails 4.2+ only, as `deliver` is deprecated.
    elsif message.respond_to?(:deliver_now)
      message.deliver_now
    else
      message.deliver
    end
  end
end