我正在尝试安排在触发操作后延迟发送的电子邮件。我正在使用带有Mail_later功能的Action Mailer:
UserMailer.email_form(params[:session][:email]).deliver_later(wait: 2.minute)
它在本地和heroku上都可以正常工作,除非在安排了电子邮件但尚未发送电子邮件的情况下再次重新启动服务器/部署。我该如何解决?
答案 0 :(得分:1)
我认为问题是:deliver_later
在后台使用ActiveJob(Rails的一部分/框架)在后台发送电子邮件。默认情况下,Rails带有异步队列实现,该实现通过进程内线程池运行作业。作业将异步运行,但是重新启动或进程崩溃时,队列中的所有作业都将被丢弃,因为它们仅位于RAM(内存)中,而不位于持久后端(DB,Redis)中。
如果要保留作业,则应切换到其他适配器(Sidekiq,Resque,延迟的作业,...)。
您可以找到more details here。