Ruby on rails Rails 3/delayed_作业-通缉:延迟邮件的基本示例
我一直在想如何使用rails 3的delayed_作业发送延迟邮件。我已经尝试了几乎所有我能想到的可行的可能性组合-我可以让邮件在后台运行,我只是不能让它延迟发送到未来的时间。db中的delayed_jobs表清除任务,日志显示为'sent',delayed_job任务处理器拾取任务并显示sent With failure…但邮件为:Ruby on rails Rails 3/delayed_作业-通缉:延迟邮件的基本示例,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我一直在想如何使用rails 3的delayed_作业发送延迟邮件。我已经尝试了几乎所有我能想到的可行的可能性组合-我可以让邮件在后台运行,我只是不能让它延迟发送到未来的时间。db中的delayed_jobs表清除任务,日志显示为'sent',delayed_job任务处理器拾取任务并显示sent With failure…但邮件为: 立即发送,或 根本就没有到 如果我将来尝试发送 如果有人能提供一个rails 3延迟工作的简单例子,在将来发送邮件,我将非常感激。我肯定洛萨人会这么做,所以我
- 立即发送,或
- 根本就没有到
class TestmailerController < ApplicationController
def index
Testmailer.delay.test_mail
end
end
作业命令:
rake jobs:work
使用
.delay
方法和设置异步处理:测试邮件是多余的。尝试从代码中删除.delay
方法。简单使用
Testmailer.test_mail # without .deliver due to a delayed_job issue
但是,我对您的配置进行了一些测试,当使用sqlite时,run_at
被忽略(不知道为什么),但是当使用mysql2时,一切都很好。我同意andrea的观点-我遇到了这个确切的问题,在将本地开发数据库从sqlite切换到mysql之后,我可以像这样运行代码
Emailer.delay({:run_at => 5.minutes.from_now}).welcome(@user)
它会在5分钟后发送电子邮件。请注意,您可能需要比5分钟更大的延迟(在时区异常的情况下)才能确保它正常工作。我在Rails 3和mongoid中发现,异步删除句柄可以让它正常工作。我遇到了各种各样的问题,而且似乎delayed_job无法识别我的Emailer类中的任何对象。异步删除句柄\u修复了它 你知道如何做到这一点没有延迟的方法。我想使用句柄\u async。。。方法。我喜欢使一个方法在所有被调用的地方都延迟,而不是改变所有调用方。
Testmailer.test_mail # without .deliver due to a delayed_job issue
Emailer.delay({:run_at => 5.minutes.from_now}).welcome(@user)