在不重新设置排队系统的情况下,实现摘要电子邮件的最优雅方式是什么?

Pet*_*xey 6 email queue ruby-on-rails delayed-job

我有我的交易电子邮件系统设置,默认情况下,当事件发生时,人们会收到电子邮件:

class Comment

  after_create :email_original_poster

  def email_original_poster
    UserMailer.delay.notify_author_of_comment self
  end

end
Run Code Online (Sandbox Code Playgroud)

然而,不是收到电子邮件,我的一大部分用户更喜欢每日或每周摘要.

实现这个最干净最优雅的方法是什么?

我已经delayed_job运行但是这并不像是一项delayed_job工作,因为我正在排队需要执行的数据,而不是需要执行的操作.

......没有重新发明排队系统

我知道明显的解决方案是表格queued_emails,当然我可以做到这一点.我问这个问题的原因是这样做是重新发明排队系统.不仅有很多排队系统,但正如Percona这篇措辞谨慎的帖子所指出的那样,最好不要推销自己的排队系统:

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

您是否实施了摘要电子邮件,是否使用了delayed_job以及您学到了什么?

小智 1

显然您不必创建自己的排队系统。我没有使用delayed_job,但我将resque与一个名为resque_mailer的漂亮小gem 结合使用,它应该完全满足您的需求。resque_mailer 的优点在于,一旦设置完毕,您不必更改通常发送邮件的方式:MyMailer.some_mailing({vars}).deliver如果由于某种原因您不想使用队列发送邮件(立即发送),您可以只需要添加!交付后它就会做到这一点。

研究一下resque(使用redis)和resque_mailer,我认为它会做你想要的。