我有以下情况:
1. 有人在Redmine中创建任务
2. 此任务完成(或未完成)某些事情
3. 如果任务创建后 3 天后状态不正确,请发送电子邮件给感兴趣的人。
我的问题是如何使用 Rails 在三天内安排一封电子邮件(或检查是否需要电子邮件的任务)?到目前为止,我能想到的唯一选择是创建一些 rake 任务并每隔几分钟运行一次。还有更好的选择吗?
最佳答案
您有几个选择。您可能想查看Active Job ( rails > 4.2)。这使您可以安排作业在指定时间段后运行:
MyJob.set(wait_until: Time.now + 3.days).perform_later(record)
如果您使用的是 4.2 之前的 Rails 版本,则 DelayedJob或Sidekiq或Resque可用于。无论如何,Active Job 本质上是此类内容之上的一层,因此以后迁移到该层应该不会太痛苦。
或者,如果您不需要在 3 天后检查,那么您可以扫描需要使用 cron 生成电子邮件的任务(whenever 是一个很好的包装器)。您可以根据需要进行多次扫描,尽管每隔几分钟可能会过多,并且这意味着您不必在服务器上设置排队后端。
这确实意味着您必须找到需要为其生成电子邮件的任务,而使用排队系统您将确切地知道您正在处理哪个任务。然而,似乎很多任务都不需要电子邮件,因此积极寻找需要电子邮件的任务可能会更有效。
关于ruby-on-rails - rails : send mail after some time has passed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211001/