2

只是想知道在我的 Rails 应用程序中构建异步邮件的最佳方法是什么(使用 Sidekiq)?我有一个带有多种方法/电子邮件的 ActionMailer 类...

通知者.rb

class Notifier < ActionMailer::Base
  default from: "\"Company Name\" <notify@domain.com>"

  default_url_options[:host] = Rails.env.production? ? 'domain.com' : 'localhost:5000'

  def welcome_email(user)
    @user = user
    mail to: @user.email, subject: "Thanks for signing up!"
  end

  ...

  def password_reset(user)
    @user = user
    @edit_password_reset_url = edit_password_reset_url(user.perishable_token)
    mail to: @user.email, subject: "Password Reset"
  end
end

然后,例如,password_reset 邮件User通过执行在我的模型中发送...

用户.rb

def deliver_password_reset_instructions!
  reset_perishable_token!
  NotifierWorker.perform_async(self)
end

notifier_worker.rb

class NotifierWorker
  include Sidekiq::Worker
  sidekiq_options queue: "mail"

  def perform(user)
    Notifier.password_reset(user).deliver
  end
end

所以我想我在这里想知道几件事......

  1. 是否可以在一个工作人员中定义许多“执行”操作?通过这样做,我可以让事情变得简单(一个通知者/邮件工作者),并通过它发送许多不同的电子邮件。或者我应该创建许多工人?每个邮件程序一个(例如 WelcomeEmailWorker、PasswordResetWorker 等),只需将它们全部分配给 Sidekiq 使用相同的“邮件”队列。
  2. 我知道它可以按原样工作,但是我应该将这些邮件方法(welcome_email、password_reset 等)中的每一个分解为单独的邮件程序类,还是可以将它们全部放在一个类中Notifier

非常感谢这里的任何建议。谢谢!

4

2 回答 2

3

正如这里所讨论的,Sidekiq 默认支持延迟邮件,因此无需创建单独的工作程序:

Notifier.delay.password_reset(user.id)

于 2013-10-27T03:50:48.460 回答
2

我不确定,但我认为如果您使用延迟,在邮件操作中传递一个实例不是一个好主意,所以最好将上面的代码更改为:

Notifier.delay.password_reset(user.id)
于 2014-05-07T03:37:32.040 回答