Ruby on rails 什么是「;轨道;阻止向用户发送大量消息?
当我们的rails 3应用程序向用户发送消息(电子邮件或短信)时,我们需要控制发送速度 假设Ruby on rails 什么是「;轨道;阻止向用户发送大量消息?,ruby-on-rails,throttling,Ruby On Rails,Throttling,当我们的rails 3应用程序向用户发送消息(电子邮件或短信)时,我们需要控制发送速度 假设 the_list = Messages.find(someconditions) the_list.each do |msg| msg.send_me end 返回数百条消息,我们(a)真的不想一次将它们全部存储在内存中,并且(b)不能一次将它们全部释放 如果我们的实际限制是发送,比如说,每分钟200次,那么rails是如何以较小的批量“查找”它们的(b)限制对的呼叫。发送给我以达到我们的目标
the_list = Messages.find(someconditions)
the_list.each do |msg|
msg.send_me
end
返回数百条消息,我们(a)真的不想一次将它们全部存储在内存中,并且(b)不能一次将它们全部释放
如果我们的实际限制是发送,比如说,每分钟200次,那么rails是如何以较小的批量“查找”它们的(b)限制对的呼叫。发送给我以达到我们的目标发送速率
FWIW我们正在Heroku上运行,出于其他目的,我们现在延迟了\u作业的运行。要限制发送的消息量,您可以使用以下方法:
Messages.find(someconditions, :limit => 100)
如果您想限制,最简单的方法可能是创建多个延迟作业,它们在将来的某个时间运行
如果您想进一步更改您的应用程序,您可以随时将send_添加到messages表中,并在创建邮件时执行以下操作:
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!
然后,在延迟的作业中,您可以选择在