在处理作业时是否执行延迟的Sidekiq Mailer方法?

时间:2014-07-02 15:03:34

标签: ruby-on-rails sidekiq

我有一个典型的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方法,然后将生成的电子邮件排队等待两天后发送出来,从而否定我的条件代码?

1 个答案:

答案 0 :(得分:1)

您的理解是100%正确的,这正是您想要做的。

我猜你不会重新启动Sidekiq以获取代码更改。 Sidekiq不像Rails那样自动重新加载更改的代码。