想知道在我的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(user)'。無需創建單獨的工作人員。看到這裏:https://github.com/mperham/sidekiq/wiki/Delayed-Extensions –
極樂!棒極了。感謝您的參考。如果你想補充說,我會接受。 – gbdev