以可变间隔运行Rake任务

时间:2011-10-18 12:10:19

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-plugins

我正在使用(https://github.com/javan/whenever)ruby gem在模型X的after_create回调中插入crontab条目。此条目指示作业每45分钟运行一次。但是我想把控件交给用户,在那里他可以指定时间间隔。所以这个过程是这样的:

  1. 用户创建Model X,我在45分钟后插入crontab条目以执行作业。
  2. 用户看到45分钟不够好,他希望能够将时间间隔从UI更改为30分钟(请注意,这是一个HTML / UI控件,他应该可以这样做)。< / LI>
  3. 稍后他应该能够多次更改时间间隔。
  4. 任何宝石或任何关于我们如何实现这一点的想法都表示赞赏。我对任何版本的rails都开放,可以在任何人开始实现,因为这个功能构成了功能的核心。

    感谢。

1 个答案:

答案 0 :(得分:4)

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

不是为每个用户创建一个crontab,而是每分钟创建一个。在User模型中存储有关该用户的crontab频率以及上次执行crontab的信息。

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

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

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