Просто интересно, как лучше всего организовать структурирование асинхронных почтовых программ в моем приложении Rails (с использованием Sidekiq)? У меня есть один класс ActionMailer с несколькими методами/писем ...Лучшая практика структурирования асинхронных почтовых программ (с использованием Sidekiq)
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 (пользователь)'. Не нужно создавать отдельных работников. См. Здесь: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions –
Bliss! Это потрясающе. Спасибо за ссылку. Если вы хотите добавить это в качестве ответа, я соглашусь. – gbdev