Rails在特定时间内查找所有用户安排的事件?

时间:2018-03-08 16:37:04

标签: ruby-on-rails cron scheduler psql ice-cube

我有一个应用程序,允许用户安排任务随时运行。 (带有重复项目的待办事项清单。)

我需要以某种方式重新触发这些事件,以便每次通过更新对象上的属性来重新显示它们时 - 它还可以向用户发送通知。

我的计划是让一个cron作业以每分钟/小时/短的间隔运行,在那个作业中,它会找到所有项目的日程安排与当前时间相匹配,或者应该在上次工作后更新但是,如果没有遍历每个项目,我看不到快速查询这些对象的方法。

使用Ice Cube我可以非常轻松,干净地保存数据库中的日程安排,但我没有看到找到与特定时间点匹配的所有事件的方法。

我知道,一旦我找到了我可以运行occurring_between?occurring_at?的项目来查找我是否应该运行它,但是这需要将每个项目拉入内存并手动检查它,这不是很可扩展性。

有没有办法让我失踪,还是有其他建议来完成我在这里要做的事情?它还很早,所以我没有依赖Ice Cube或任何当前的实现。

1 个答案:

答案 0 :(得分:0)

经过多次考虑之后 - 我没有看到任何方法来做到这一点,所以我想出了一些我会做的小黑客:

在项目对象上,我还有2个附加属性。其中一个是schedule,它被送到Ice Cube来生成重复出现的所有日期/时间。下一个将是next_occurrence,我将在创建时和每次续订项目时设置。 然后在工作人员中,我将查询过去具有next_occurrence的所有项目并处理它们,将next_occurrence重置为下次计划发生的时间。

如果有人有更好的解决方案,我会留下这个答案没有标记。