我正在使用(https://github.com/javan/whenever)ruby gem在模型X的after_create回调中插入crontab条目。此条目指示作业每45分钟运行一次。但是我想把控件交给用户,在那里他可以指定时间间隔。所以这个过程是这样的:
任何宝石或任何关于我们如何实现这一点的想法都表示赞赏。我对任何版本的rails都开放,可以在任何人开始实现,因为这个功能构成了功能的核心。
感谢。
答案 0 :(得分:4)
我不喜欢你解决方案的方法。这意味着,如果将来您的应用程序将拥有2k用户,您将启动2k crontabs?
不是为每个用户创建一个crontab,而是每分钟创建一个。在User模型中存储有关该用户的crontab频率以及上次执行crontab的信息。
然后,当主crontab每分钟开始时,检查哪些用户有last_crontab_at + frequency < Time.current
并为这些用户运行脚本。
通过这种方式,无论用户数量多少,应用程序都将进行扩展。
另外,请记住crontabs是服务器本地的。如果您必须更改服务器或创建群集,会发生什么?我建议你考虑使用后台处理服务或队列。