我有一个典型的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