Ruby on rails Rails:在不重复同一个用户的情况下,将一大组用户分成几天运行一项任务的最佳方式是什么?
我正在为我的Rails应用程序编写一份自动邮件报告,我想将数千名用户分成7个不同的组,每个工作日(Ruby on rails Rails:在不重复同一个用户的情况下,将一大组用户分成几天运行一项任务的最佳方式是什么?,ruby-on-rails,Ruby On Rails,我正在为我的Rails应用程序编写一份自动邮件报告,我想将数千名用户分成7个不同的组,每个工作日(Time.now.wday)向一个组发送电子邮件 原因是,如果每个人都在同一时间启动邮件程序,就会出现流量高峰,并且支持可能无法同时处理所有这些用户 划分用户的最佳方式是什么,以便: rake任务每周运行一次,用户在同一周内只能在一个组中(因此他不会在同一周内收到两次邮件) 用户数量在一周内可能会增加(新用户),他们至少需要被包括在一个组中 最常用的方法之一是跟踪上次向用户发送电子邮件的日期和时间
Time.now.wday
)向一个组发送电子邮件
原因是,如果每个人都在同一时间启动邮件程序,就会出现流量高峰,并且支持可能无法同时处理所有这些用户
划分用户的最佳方式是什么,以便:
- rake任务每周运行一次,用户在同一周内只能在一个组中(因此他不会在同一周内收到两次邮件)
- 用户数量在一周内可能会增加(新用户),他们至少需要被包括在一个组中
last\u emailed\u at
列
然后,您可以让rake
任务查询前X个用户
where('last_emailed_at IS NULL OR last_emailed_at < ?', 1.week.ago)
where('last_emaild_at为空或last_emaild_at<?',1.周前)
您应该按照
最近一次发到
的电子邮件,以升序
的顺序(如果您的数据库支持,请先使用空值
)对结果进行排序。Mihai,这正是我正在考虑的解决方案。但当我添加此列时,它是空白的。因此查询.where(“上次发送电子邮件的时间<1.week.ago”)
不会返回任何结果。您建议如何>同时检查空白,其中('last\u emailed\u at为空或last\u emailed\u at<?',1.周前)