【发布时间】:2015-12-18 00:05:47
【问题描述】:
我正在 Rails 4 中开发一个应用程序,但不确定如何实现某个功能:基本上我需要实现某种 cron 作业。例如,假设我在我的应用程序中创建了一张发票。我需要该应用程序来检查发票到期日并向客户发送未支付发票的提醒。我想在没有用户输入的情况下实现这一目标。
我怎样才能做到这一点?
我一直在考虑这个问题,并考虑使用像whenever 这样的工具,它会经常检查数据库。
但是还有其他方法吗?更有效率的东西?
谢谢
编辑:我试图避免的低效率:
我设想的可行方式是:
- 发票已创建。选择了到期日。此日期会自动添加到集合中(我使用的是 Mongoid,但可能与表格相同)
- 每天(gem)或 cron 作业都会启动一个脚本/方法/函数来检查上述集合中的条目。如果发现到期日期在某个时间范围内的条目(例如在 3 天内到期)将启动另一个脚本/方法来通知客户发票即将到期。
我担心如果有数千张发票,检查所有条目并检查它们是否在特定时间范围内可能会占用大量资源。那么,有没有更好的解决方案?
【问题讨论】:
-
您将不得不使用 CRON,因为它是操作系统级别的实现。 CRON 只是触发一个脚本,在你的情况下是一个 Ruby 脚本
-
寻找
whenevergem。如果你使用的是sidekiq,你可以使用sidekiq-scheduler -
:) 问题中链接的when gem?
-
关于针对 cron 运行 Rails 代码见gotealeaf.com/blog/cron-jobs-and-rails
-
如果您想知道 CRON 的哪些低效问题/当您试图避免时,这会很有趣,并且在答案方面很有帮助?主要问题通常是可能需要启动整个 Rails 环境来做一些简单的事情,但可能还有其他事情你试图避免。
标签: ruby-on-rails cron recurring-billing