我有一個典型的ActionMailer,它有一個指定電子郵件傳遞的方法。處理作業時是否延遲執行Sidekiq Mailer方法?
def some_email(user_id)
@user = User.find(user_id)
if @user.eligible_for_email?
mail(to: @user.email, from: "[email protected]", subject: "The Subject")
@user.email_sent = Date.today
@user.save
end
end
我不想耽誤這一點使用Sidekiq的發送所以我用:
Mailer.delay_for(2.days).some_email(user.id)
的eligible_for_email方法:
def eligible_for_email?
!unsubscribed? && email_sent.nil?
end
在此期間,用戶可以有退訂,這爲什麼在用戶模型中有一種方法叫做eligible_for_email?
,我可以用它來有條件地發送電子郵件 - 但顯然這種情況需要在電子郵件發出之前進行測試nt,而不是在工作安排時。
所以問題是,當我使用Sidekiq來處理這個問題時,條件邏輯在作業完成時似乎沒有運行。
Sidekiq是否在運行時執行some_email
方法,然後將產生的電子郵件排隊等待兩天後發送出去,從而否定了我的條件代碼?
'some_email'方法直到預定時間才被調用。這個問題可能在'eligible_for_email?'中嗎?你可以發佈該方法的代碼? – infused
當然。 BTW它工作正常,當我打電話Mailer.some_email(user.id).deliver – edralph
是否'email_sent'被設置在適當的一天或它被設置爲郵件入隊後?這會告訴你何時調用'some_email'方法。另外,'unsubscribed'是一個簡單的布爾屬性,還是一種方法? – infused