Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在不重复同一个用户的情况下,将一大组用户分成几天运行一项任务的最佳方式是什么?_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails:在不重复同一个用户的情况下,将一大组用户分成几天运行一项任务的最佳方式是什么?

Ruby on rails Rails:在不重复同一个用户的情况下,将一大组用户分成几天运行一项任务的最佳方式是什么?,ruby-on-rails,Ruby On Rails,我正在为我的Rails应用程序编写一份自动邮件报告,我想将数千名用户分成7个不同的组,每个工作日(Time.now.wday)向一个组发送电子邮件 原因是,如果每个人都在同一时间启动邮件程序,就会出现流量高峰,并且支持可能无法同时处理所有这些用户 划分用户的最佳方式是什么,以便: rake任务每周运行一次,用户在同一周内只能在一个组中(因此他不会在同一周内收到两次邮件) 用户数量在一周内可能会增加(新用户),他们至少需要被包括在一个组中 最常用的方法之一是跟踪上次向用户发送电子邮件的日期和时间

我正在为我的Rails应用程序编写一份自动邮件报告,我想将数千名用户分成7个不同的组,每个工作日(
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.周前)