当我们的rails 3应用程序向用户发送消息(电子邮件或短信)时,我们需要限制我们这样做的速度。
假设
the_list = Messages.find(someconditions)
the_list.each do |msg|
msg.send_me
end
返回数百条消息,我们(a)并不真的希望它们一次全部存储在内存中,并且(b)不能同时将它们全部发送出去。
如果我们的实际限制是发送,比方说,每分钟200,那么以较小批量“找到”它们的轨道方式是什么(b)限制对.send_me的调用以满足我们的目标发送速率
FWIW我们正在Heroku上运行,并且已经将delayed_job用于其他目的。
答案 0 :(得分:2)
要限制发送的邮件数量,您可以使用:
Messages.find(someconditions, :limit => 100)
如果您想以最简单的方式进行限制,可能会创建多个延迟的作业,而这些作业将来只会run_at
。
如果您想进一步更改应用程序,可以在消息表中添加send_at时间,并在创建消息时执行以下操作:
current_send_at = Message.for_user(current_user).latest.send_at || Time.now
new_message.send_at = current_send_at + 1.minute
new_message.save!
然后在您的延迟工作中,您选择send_at < now()
的邮件。这有意义吗?
答案 1 :(得分:1)
如果你无法从rails进程中卸载它,则无法执行此操作,否则您将阻止整个应用程序。在ec2上启动微实例并轮询队列w /要发送的消息。从铁轨上卸下它。