我有一个典型的ActionMailer,其中包含指定电子邮件传递的方法。
def some_email(user_id)
@user = User.find(user_id)
if @user.eligible_for_email?
mail(to: @user.email, from: "me@me.com", subject: "The Subject")
@user.email_sent = Date.today
@user.save
end
end
我想延迟使用Sidekiq发送这个,所以我使用:
Mailer.delay_for(2.days).some_email(user.id)
qualified_for_email方法:
def eligible_for_email?
!unsubscribed? && email_sent.nil?
end
与此同时,用户可以取消订阅,这就是为什么在用户模型中有一个名为eligible_for_email?
的方法可以用来有条件地发送电子邮件 - 但显然这个条件需要在之前测试发送电子邮件,而不是在安排作业时发送。
所以问题在于,当我使用Sidekiq来处理它时,条件逻辑似乎在作业完成时不会运行。
Sidekiq是否可以通过在运行时执行some_email
方法,然后将生成的电子邮件排队等待两天后发送出来,从而否定我的条件代码?
答案 0 :(得分:1)
您的理解是100%正确的,这正是您想要做的。
我猜你不会重新启动Sidekiq以获取代码更改。 Sidekiq不像Rails那样自动重新加载更改的代码。