Ruby on rails 针对每分钟都在运行的邮件程序的最佳rails解决方案

Ruby on rails 针对每分钟都在运行的邮件程序的最佳rails解决方案,ruby-on-rails,cron,rake,backgroundrb,Ruby On Rails,Cron,Rake,Backgroundrb,我有一个应用程序,它每分钟检查一次数据库,查看当时应该发送的任何电子邮件。我在考虑让它成为一个每分钟都由cron作业运行的rake任务。有没有更好的解决办法 据我所知,这并不理想,因为rake必须每分钟加载整个rails环境,这会变得非常昂贵 想法 谢谢 你可以用。然而,这将消耗主Rails应用程序的内存,因为它将生成一个专门用于backgroundrb的Ruby实例 您还可以在主应用程序中定义一个SystemController(或等效程序),其中包含与应用程序应执行的各种家庭任务相对应的各种

我有一个应用程序,它每分钟检查一次数据库,查看当时应该发送的任何电子邮件。我在考虑让它成为一个每分钟都由cron作业运行的rake任务。有没有更好的解决办法

据我所知,这并不理想,因为rake必须每分钟加载整个rails环境,这会变得非常昂贵

想法

谢谢

  • 你可以用。然而,这将消耗主Rails应用程序的内存,因为它将生成一个专门用于
    backgroundrb
    的Ruby实例
  • 您还可以在主应用程序中定义一个
    SystemController
    (或等效程序),其中包含与应用程序应执行的各种家庭任务相对应的各种操作。您可以使用
    wget
    curl
    crontab
    中“prod”它,其优点是它与主应用程序共享资源。根据您的偏执程度,或者您对DOS(或其他类型的攻击)的脆弱程度,您可能会选择阻止从环回以外的地址访问此控制器的URL(最好是在反向代理中,或者从控制器本身)
  • 我按照Vlad的建议(#2)去做,只接受本地请求,而且我非常偏执,还需要在url上附加一个特定的查询字符串


    我用这种方式设置了几个定期操作。

    一个非常简单的方法是使用一个脚本

    while true do
        check_and_send_messages()
        sleep 60
    end
    
    …这意味着您不会不断地为Rails环境重生

    显然,它有各种缺陷,但也有一些好处(例如,使用每分钟1个Rake,如果Rake任务需要一分钟以上,Rake将一次运行多次)


    另外,Railscasts剧集可能会给你一些想法(他们正是在描述这项任务)

    事实证明,实际上有一个专门为这项任务设计的东西:ar_mailer。ar_-mailer将电子邮件排入数据库队列,然后使用ar_-mailer命令定期发送电子邮件。你可以随时打电话给阿鲁·梅勒

    ar_mailer的好处在于,它基本上不需要改变你发送电子邮件的方式。您只需要从ar_mailer而不是ActiveMailer继承。使用这种方法,您不必担心在后台运行rake任务、分叉进程或诸如此类的事情——实际上,您得到了一个真正的邮件服务器,其中包含排队的邮件,这些邮件在实际发送时会被删除。如果您的系统发送大量电子邮件,则此功能非常重要。我用ar_mailer建立了一个社交网络——因此我可以证明它的健壮性

    。我强烈建议不要在这里使用您自己的解决方案,因为Eric已经为这个问题构建了一个经过时间考验的解决方案