【发布时间】:2015-11-30 09:40:39
【问题描述】:
我有这样的场景:一个用户购买了一个产品,当交易处理完两天后,我需要给买家发送邮件通知。
此时我的想法是使用whenever gem 并检查构建一个 cron 作业以每天签入,如果 2 天过去了,如果为真,则 cron 作业将发送邮件通知。
我不知道这样做是否可以...你能给我更好的解决方案吗?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4.2 cron-task
我有这样的场景:一个用户购买了一个产品,当交易处理完两天后,我需要给买家发送邮件通知。
此时我的想法是使用whenever gem 并检查构建一个 cron 作业以每天签入,如果 2 天过去了,如果为真,则 cron 作业将发送邮件通知。
我不知道这样做是否可以...你能给我更好的解决方案吗?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4.2 cron-task
您可以将ActiveJob 与perform_later 一起使用,例如:
NotificationSendJob.set(wait: 2.days).perform_later(record)
请注意,并非所有后端都支持这一点。你可以在这里查看检查特征矩阵:http://api.rubyonrails.org/classes/ActiveJob/QueueAdapters.html
【讨论】:
我建议使用sidekiq,它是一个后台处理库,而不是任何时候使用。 cron 作业必须每天执行(在您的特定情况下)。它不考虑是否必须发送邮件。即使没有要发送的邮件,作业仍然会执行,这是一种错误的做法。
您可以使用诸如 sidekiq 之类的后台处理库在后台调度作业。结帐https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs
【讨论】: