Ruby on rails 针对每分钟都在运行的邮件程序的最佳rails解决方案
我有一个应用程序,它每分钟检查一次数据库,查看当时应该发送的任何电子邮件。我在考虑让它成为一个每分钟都由cron作业运行的rake任务。有没有更好的解决办法 据我所知,这并不理想,因为rake必须每分钟加载整个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(或等效程序),其中包含与应用程序应执行的各种家庭任务相对应的各种
backgroundrb
的Ruby实例SystemController
(或等效程序),其中包含与应用程序应执行的各种家庭任务相对应的各种操作。您可以使用wget
或curl
从crontab
中“prod”它,其优点是它与主应用程序共享资源。根据您的偏执程度,或者您对DOS(或其他类型的攻击)的脆弱程度,您可能会选择阻止从环回以外的地址访问此控制器的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已经为这个问题构建了一个经过时间考验的解决方案