2011-10-18 84 views
1

我每次都使用(https://github.com/javan/whenever)ruby gem在模型X的after_create回调中插入crontab条目。此条目指示作业每45分钟运行一次。但我想把控制权交给用户,他可以指定时间间隔。所以过程如下:以可变间隔运行耙式任务

  1. 用户创建一个模型X,我插入一个crontab条目以在45分钟后执行作业。
  2. 用户看到45分钟不够好,他希望能够将UI的时间间隔从30分钟改变为30分钟(请注意,这是一个HTML/UI控件,他应该能够做到这一点)。
  3. 后来他应该可以更改任意次数的时间间隔。

任何宝石或任何想法,我们如何能够完成此赞赏。我对任何版本的rails都开放,并且可以在任何人中开始实现,因为此功能构成了功能的核心。

谢谢。

回答

4

我不喜欢你的解决方案。这意味着,如果将来您的应用程序将拥有2k用户,那么您将启动2k crontabs?

无需为每个用户创建一个crontab,只需每分钟创建一个。在User模型中存储关于该用户的crontab频率以及上次执行crontab时的频率的信息。

然后,当主crontab每分钟开始时,检查哪些用户有last_crontab_at + frequency < Time.current并为这些用户运行脚本。

通过这种方式,无论用户数量多少,应用程序都可以扩展。

此外,请记住crontabs是服务器本地的。如果您必须更改服务器或创建群集,会发生什么情况?我建议你考虑使用后台处理服务或队列。

+0

我当时正在暗示自己。顺便说一句,你可能意思是'last_crontab_at + frequency.minutes Laas

+0

你说得对。固定。 –

+0

频率可能在几分钟之内,所以我编辑了我以前的评论以反映这一点。 – Laas