Какой самый изящный способ реализовать дайджест электронной почты без создания новой системы очередей?

У меня есть настройка транзакционной системы электронной почты, и по умолчанию люди получают электронные письма по мере возникновения событий:

class Comment

  after_create :email_original_poster

  def email_original_poster
    UserMailer.delay.notify_author_of_comment self
  end

end

Однако вместо того, чтобы получать электронную почту как есть, часть моих пользователей предпочла бы ежедневный или еженедельный дайджест.

Какой самый чистый и элегантный способ реализовать это?

У меня уже есть отложенное _ задание , но это не кажется заданием отложенное _ задание , так как я подаю в очередь данные, которые необходимо обработать, а не действия, которые необходимо выполнить.

... без создания новой системы очередей

Я знаю, что очевидным решением является таблица поставленных в очередь _ электронных писем , и, конечно, я мог бы сделать это. Причина, по которой я задаю вопрос, в том, что для этого нужно заново создать систему очередей. Мало того, что там много систем очередей, но как этот хорошо сформулированный пост от Percona точек out, это хорошая идея, чтобы не своя:

http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why-itll-bite-you/

Внедрили ли Вы дайджест по электронной почте, использовали ли Вы delent _ job и чему Вы научились?

-121--1673504-

Я собираюсь использовать оператор goto Спасите меня от смерти рэптора - есть ли лучший способ справиться с такой структурой? в то время как (условие) {$ this- > phase1 (); $ this- > phase2 (); $ this- > phase3 (); $ this- > phase4 ();...

Избавить меня от смерти насильника - есть ли какой-либо лучший способ обработки такого рода структуры?

while(condition) {
    $this->phase1();
    $this->phase2();
    $this->phase3();
    $this->phase4();
}

На протяжении любого из этих методов можно было выполнить условие . НЕМЕДЛЕННО после выполнения условия цикл ДОЛЖЕН выйти. Если бы я мог вызвать break; внутри phase2 (); например, мне бы не нужен оператор goto (но, конечно, это вызвало бы ошибку).

12
задан Chris G. 28 September 2011 в 20:23
поделиться