Отправляйте 50 писем каждые 5 минут с delayed_jobs - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь создать функцию списков рассылки в Rails, основанную на delayed_jobs.Сейчас я отправляю письма, перебирая таблицу пользователей и .deliver почту на каждый почтовый адрес.

как я могу интегрировать его в delayed_jobs, чтобы он отправлял 50 писем каждые 5 минут и запоминал, какие адреса уже сделаны?мне нужно составить отдельную таблицу, в которой я храню все отправленные письма и проверяю каждый раз, когда я отправляю еще 50 писем?

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

Возможно, вы захотите иметь записи в таблице для отправленных писем.Таким образом, он служит контрольным журналом, если процессы останавливаются или каким-то образом перестают работать.

Предлагаем вам посмотреть на это с помощью эластичной облачной базы данных, такой как MongoLab, MongoHQ или SimpleDB.(Основанные на Mongo сервисы позволяют легко расширять схему для новых записей электронной почты.)

Если вы сделаете это, то облачная рабочая очередь, такая как SimpleWorker, может упростить отправку большого количества сообщений одновременно или в пакетном режиме.обойти любые ограничения скорости.(полное раскрытие: я работаю в Iron.io/SimpleWorker) * * * * * * * *

Вы используете хороший подход для объединения нескольких почтовых отправлений в одну рабочую задачу, чтобы амортизировать затраты на настройку рабочего.С помощью гибкой облачной рабочей системы вы можете заставить главных работников выходить из графика, а затем ставить в очередь ряд задач подчиненных работников, каждая из которых должна иметь набор отправляемых пользователей.

С записями в таблице вы можете затем вернуться к таблицам данных и адресовать любые электронные письма, которые не прошли или не прошли.

0 голосов
/ 10 сентября 2011

Пусть отложенная работа выполняет всю работу:

User.all.each_with_index |user, index|
  Mailer.delay({:run_at => ((index / 50) * 5).minutes.from_now}).send_newsletter(user)
end

Это должно работать, но не проверено.

0 голосов
/ 09 сентября 2011

50 электронных писем - это не так много, как мне кажется, за несколько секунд.Используйте foreverb для отправки писем каждые 5 минут.

...