Просто интересно, как лучше всего структурировать асинхронные почтовые программы в моем приложении Rails (используя Sidekiq)? У меня есть один класс ActionMailer с несколькими методами/электронными письмами...
notifier.rb:
class Notifier < ActionMailer::Base
default from: "\"Company Name\" <[email protected]>"
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
, выполняя...
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
Так что я думаю, мне интересно несколько вещей здесь...
- Можно ли определить множество действий «выполнить» в одном работнике? Поступая таким образом, я мог бы упростить задачу (один уведомитель/почтовый работник), поскольку он у меня есть, и отправлять через него много разных электронных писем. Или я должен создать много рабочих? По одному на каждую почтовую программу (например, WelcomeEmailWorker, PasswordResetWorker и т. д.) и просто назначьте им всем использование одной и той же «почтовой» очереди с Sidekiq.
- Я знаю, что это работает как есть, но должен ли я разбить каждый из этих почтовых методов (welcome_email, password_reset и т. д.) на отдельные классы почтовых программ, или это нормально, чтобы они все находились в одном классе, таком как
Notifier
?
Очень ценю любые советы здесь. Спасибо!
Notifier.delay.password_reset(user)
. Не нужно создавать отдельных воркеров. См. здесь: github.com/mperham/sidekiq/wiki/Delayed-Extensions - person Damien Roche   schedule 27.10.2013