что такое "рельсовый путь" для регулирования отправки большого количества сообщений пользователям? - PullRequest
1 голос
/ 10 марта 2011

Когда наше приложение rails 3 отправляет сообщения (электронную почту или смс) пользователям, нам не нужно ограничивать скорость, с которой мы это делаем.

предположим,

the_list = Messages.find(someconditions) 
the_list.each do |msg|
   msg.send_me
end

возвращает сотни сообщений,мы (а) на самом деле не хотим, чтобы они все были в памяти сразу, и (б) не можем запустить их все сразу.

Если наш практический предел - отправлять, скажем, 200 в минуту, как это сделать?«найти» их небольшими партиями (b) отрегулировать вызовы .send_me, чтобы удовлетворить нашу целевую скорость отправки

FWIW, мы работаем на Heroku и у нас сейчас используется delayed_job для других целей.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Чтобы ограничить количество отправляемых сообщений, вы можете использовать это:

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 голос
/ 10 марта 2011

Если вы не можете разгрузить это из процесса rails, вы не сможете это сделать, иначе вы заблокируете все приложение. Запустите микроэкземпляр на ec2 и опросите очередь с сообщениями для отправки. Снять его с рельсов.

...