如果给定延长的等待时间,则Rails 4 ActionMailer deliver_later方法不起作用

时间:2016-12-02 00:48:43

标签: ruby-on-rails heroku actionmailer rails-activejob

我有一个托管在Heroku上的Rails应用程序,它具有发送延迟电子邮件的功能。

所以deliver_later! ActionMailer的方法能够在预定的时间异步发送电子邮件。

基本上我有一个名为NotificationMailer的邮件程序,当我这么做时

NotificationMailer.send_email(user).deliver_later!(wait_until: 5.minutes.from_now)

NotificationMailer.send_email(user).deliver_later!(wait_until: 30.minutes.from_now)

我可以在发送电子邮件之后的5分钟内收到电子邮件,距收到电子邮件的时间为30分钟,但是当我变得更加雄心勃勃并且

NotificationMailer.send_email(user).deliver_later!(wait_until: (Time.now.tomorrow.noon - Time.now).seconds.from_now)

这意味着我应该在第二天中午收到,但我无法收到该电子邮件。我看了很多,并且我读到Heroku的dynos在长时间不活动时会睡觉,然后队列中的所有ActiveJobs也会睡觉。我认为这可能是问题的原因。我不确定如何解决这个问题,并希望得到任何建议!

1 个答案:

答案 0 :(得分:0)

您可以查看this link。但基本上在dyno进入睡眠状态之后,你松开所有在睡觉前得到的dyno排队的工作。所以你需要将它们保存在redis商店中。