【问题标题】:E-mailing users through RoR app通过 RoR 应用程序向用户发送电子邮件
【发布时间】:2011-08-05 04:05:22
【问题描述】:

我正在构建基于论坛/问答社区的应用程序的最后阶段,我想添加电子邮件通知。该应用程序有几个不同的实体,包括:线程、问题、项目、照片等。目标是用户可以“订阅”任意数量的这些实体,只要实体收到新的 cmets 或活动,就可以排队发送电子邮件。此功能与 facebook 和论坛非常相似。

我研究了 ActionMailer(带有 rake 任务和延迟作业)、MailChimp API(和插件)和其他应用邮件程序(PostageAppPostmark)。

由于内存占用和服务器过载的潜在问题,我倾向于使用 ActionMailer。该应用程序将在 Heroku 上运行,但我担心服务器很容易不堪重负,每隔几分钟就会发送数百封电子邮件。

另一个复杂性是,根据用户的偏好会有不同类型的订阅(即时电子邮件通知、每日电子邮件通知)。

针对此类功能管理电子邮件的最佳方式是什么?非常感谢任何提示/想法!

【问题讨论】:

    标签: ruby-on-rails email actionmailer mailchimp


    【解决方案1】:

    您可以使用 ActionMailer 通过 SendGrid 或 Postmark 发送。 PostageApp 仍然需要一个 SMTP 服务器并添加了一个额外的依赖项,但拥有它可能会很好。我相信 MailChimp 仅用于时事通讯,所以在这里可能对您没有多大用处。

    在这里给出一个高层次的概述,有几件事很重要:

    1. 防止邮件逻辑混乱控制器。
    2. 防止延迟响应用户请求。
    3. 避免“应用程序过载”问题。
    4. 处理基于事件的定期电子邮件。

    要解决 #1,您需要使用观察者来决定何时发送基于事件的电子邮件。要考虑 #2 和 #3,您可以加入 DelayedJob,以便在后台发送电子邮件。你可以很容易地在 Heroku 上使用 SendGrid 和 ActionMailer(尤其是如果你使用 Pony)。对于 #4,您应该只创建一个 rake 任务来处理决定向谁发送电子邮件并将发送作业排队的业务逻辑,就像 Observer 那样的 DJ 任务。

    为了清楚起见,DelayedJob 将在单独的进程中执行作业。对于 Heroku,您实际上是在不同的 Dyno 中运行每个 DelayedJob 工作程序,这是一个完全独立的堆栈/环境(很可能在不同的物理服务器上)。以这种方式超载您的应用程序不会有任何问题,除非您的数据库当然无法跟上添加作业的速度(在这种情况下,您可以将 Redis 用作 DJ 商店)。您可以根据需要添加更多 DJ 工作人员,轻松进行水平扩展。

    【讨论】:

      【解决方案2】:

      看看 SimpleWorker,一个基于云的后台处理/工作队列。

      它是 Heroku 的附加组件,能够扩展和扩展以处理一组一次性帖子或预定电子邮件。 (例如,可以安排一个主作业,然后当它不按计划运行时,它会将 10、100、1000 个作业排队,以便在横向扩展的基础架构上同时运行。)

      Heroku 工作人员可以正常工作,因为它们将作为单独的进程运行,但如果您有可变负载,那么您需要一个可以根据工作进行扩展和缩减的服务 - 所以您 a) 无需为未使用的工作付费容量和 b) 可以处理突发流量和批量输出。

      (披露:我为公司工作。)

      【讨论】:

        猜你喜欢
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2021-03-28
        相关资源
        最近更新 更多