【问题标题】:Send 50 mails every 5 minutes with delayed_jobs使用 delay_jobs 每 5 分钟发送 50 封邮件
【发布时间】:2011-09-08 22:42:49
【问题描述】:

我尝试在 Rails 中创建一个基于 delay_jobs 的邮件列表功能。现在,我通过遍历用户表和.deliver 向每个邮件地址发送邮件来发送邮件。

我如何将它集成到delayed_jobs 中,让它每5 分钟发送50 封邮件并记住哪些地址已经完成?我是否需要制作一个单独的表格来存储所有已发送的邮件并在每次发送另外 50 封邮件时检查一下?

提前致谢。

【问题讨论】:

  • 您的问题基本上是“我如何编写整个应用程序”,而我们唯一能回答的方法就是为您编写它。这不是 SO 的用途。尝试一下,当您遇到特定问题时,请回来寻求帮助。
  • 你知道我真的没有看到。

标签: ruby-on-rails delayed-job mailing


【解决方案1】:

您可能希望有已发送电子邮件的表格条目。这样,如果流程出现故障或以某种方式失败,它就可以作为审计线索。

建议您考虑使用 MongoLab、MongoHQ 或 SimpleDB 等弹性云数据库来执行此操作。 (基于 Mongo 的服务可以轻松扩展新电子邮件条目的架构。)

如果您这样做,那么像 SimpleWorker 这样的云工作者队列可以轻松地同时或分批发送大量电子邮件,以绕过任何速率限制。 (全面披露:我在 Iron.io/SimpleWorker 工作)

您正在采用一种很好的方法将多个电子邮件发送捆绑到单个工作人员任务中,以摊销工作人员设置成本。使用弹性云工作者系统,您可以让主工作者脱离计划,然后将许多从属工作者任务排队,每个从属工作者任务都有一组用户要发送。

使用表格条目,您可以返回查看数据表格并处理任何失败或未通过的电子邮件。

【讨论】:

    【解决方案2】:

    我认为,50 封电子邮件并不是真的可以在几秒钟内发送出去。使用foreverb 每 5 分钟发送一次电子邮件。

    【讨论】:

      【解决方案3】:

      让延迟的工作完成所有工作:

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

      这应该可以工作,但未经测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        相关资源
        最近更新 更多