Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 处理作业时是否执行延迟的Sidekiq Mailer方法?_Ruby On Rails_Sidekiq - Fatal编程技术网

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

Ruby on rails 处理作业时是否执行延迟的Sidekiq Mailer方法?,ruby-on-rails,sidekiq,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 我想

我有一个典型的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)
符合条件的\u for \u电子邮件方法:

def eligible_for_email?
    !unsubscribed? && email_sent.nil?
end
同时,用户可能已经取消订阅,这就是为什么在用户模型中有一个名为
qualified\u for\u email?
的方法,我可以使用它有条件地发送电子邮件-但显然,这个条件需要在发送电子邮件之前测试,而不是在安排作业时测试

所以问题是,当我使用Sidekiq来处理这个问题时,当任务完成时,条件逻辑似乎没有运行


Sidekiq是否在运行时执行
some_email
方法,然后将生成的电子邮件排队两天后发送,从而否定我的条件代码?

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


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

直到计划的时间才调用
some\u email
方法。问题是否可能出在
是否有资格接收电子邮件中?
?你能把那个方法的代码贴出来吗?当然。顺便说一句,当我打电话给Mailer.some_email(user.id)。deliverIs
email\u sent
在适当的日期设置,还是在邮件排队后立即设置?当调用
some\u email
方法时,这将确切地告诉您。另外,
unsubscribed
是一个简单的布尔属性还是一种方法?好的,让我检查一下-我将延迟时间改为5.5分钟;yes unsubscribed是一个默认为false的布尔值。感谢您回答Mike:)请原谅我的无知-Sidekiq是否缓存了要运行的代码?所以在2天内,当它执行这个方法时,它会执行一个为自己保留的副本?我会按照你的建议尽快尝试。@edralph你解决问题了吗?我正在努力实现同样的目标。