想知道在我的Rails应用程序(使用Sidekiq)中构建异步邮件程序的最佳方法是什么?我有一个ActionMailer类,有多个方法/电子邮件......
notifier.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
然后,例如,通过执行... {/ p>,在我的User
模型中发送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
所以我想我在这里想了几件事......
Notifier
这样的类中? 真的很感激这里有任何建议。谢谢!
答案 0 :(得分:3)
作为discussed here,Sidekiq默认支持延迟邮件,因此无需创建单独的工作人员:
Notifier.delay.password_reset(user.id)
答案 1 :(得分:2)
我不确定,但如果您使用延迟,我认为在邮件程序操作中传递实例并不是一个好主意,所以最好将上面的代码更改为:
Notifier.delay.password_reset(user.id)