ruby 如何在rails中建模和存储循环任务?

vktxenjb  于 2023-05-06  发布在  Ruby
关注(0)|答案(4)|浏览(94)

Rails中的Cron解决方案很多,而且相当不错。我不是在纠结这个。
相反,我遇到的麻烦是让用户创建自己的重复任务(如提醒)-特别是如何建模和存储在数据库中(一个好的UI也是不平凡的-如果有代码的话会很棒)。谷歌日历是一个很好的例子(UI添加一个事件,而不是整个日历)...他们应该能够做到每天下午1点CST,或周一/周三/周五,或每周,等等。无论使用什么样的cron解决方案,都需要轮询数据库,以查看在该时间需要发送哪些提醒,等等。
有人在rails中看到过一个很好的插件/gem吗?似乎有什么东西在那里,但我还没有找到它。

j8yoct9x

j8yoct9x1#

我最终推出了自己的解决方案,因为我不需要任何超级花哨的东西。
基本上,我添加了一个next_run datetime和interval字符串列到数据库中,这是(天,周等)之一。然后设置要运行的cron作业,查找任何已经过去的next_run日期。它运行它们,然后根据interval列将next_run设置为将来的某个时间点。
简单,但为我的需要工作。

jvidinwx

jvidinwx2#

目前正在考虑使用这样的插件将递归存储在表http://github.com/fnando/recurrence/tree/master
每个提醒都有一个重复对象,提醒也会保留一个日期时间字段,当它应该发送下一个提醒时。然后cron就可以。。

get all reminder's whose "next_send" date has passed
for each reminder
  send it
  update the "next_send" field using the recurrence object
end

如果有更好的解决方案,或者我走错了路,总是感谢输入。

cetgtptt

cetgtptt3#

我总是发现ical(RFC,而不是程序)解决方案是处理重复事件的最佳方法。有几个很好的Ruby库可以处理ical,最新的是ri_cal

jhdbpxl9

jhdbpxl94#

我目前遇到了这个问题,我正在考虑的解决方案如下:

class AllowReoccuringTasks < ActiveRecord::Migration  
    def self.up  
        add_column :tasks, :reoccuring, :boolean  
        add_column :tasks, :period, :integer  
    end
end

其中period可以是1(每天)、7(每周)或14(每隔一周)。
如果你想支持其他类型的日程安排,比如每个月、工作日、周末等,你可以添加一个名为“schedule”的列,并使用常量来表示不同的日程安排类型。您也可以使用enum plugin

相关问题