在我们的服务器上,我们使用Phusion Passenger部署了多个Rails应用程序。每个应用程序都有一组必须定期安排和运行的任务(通常的清除缓存,发送邮件等)。
我在野外看到的所有示例通常都会显示一个单独的守护程序来处理应用程序的计划任务。但是,这要求守护程序加载应用程序的环境。虽然这可以在您部署一个或两个应用程序时起作用,但在服务器上可能部署了100个应用程序时,它无法扩展。 (例如,每个“守护进程”加载整个Rails环境加上应用程序代码,可能超过50MB。部署100个应用程序,而你只是在调度程序守护进程中嚼5GB。)
有没有人解决过这个问题?
答案 0 :(得分:0)
我认为答案取决于您的需求。如果这些任务需要花费很多时间,那么最简单的解决方案就是以传统的方式使用守护进程。如果你想依赖Rails堆栈,那么你必须将它加载到内存才能使用它 - 你不会逃避它。
如果您的任务不需要太多时间,那么您可以执行以下操作:使用可用的方法(如delayed_job)但定期启动和停止守护程序(有关提示,请参阅here )。因此,您可以在上午9点启动10个守护进程,并在上午10点停止它们。然后您可以再启动10个,依此类推。可以使用cron或任何类似工具启动和停止。
但是,如果您的任务在每个应用程序中非常简单且非常相似,那么您可以编写脚本来完成工作。例如,如果“通常清除缓存”意味着您从某些目录中删除某些文件,那么只需将其放入脚本并定期运行即可。发送电子邮件也可以通过脚本(ruby程序)完成。在ruby中从db获取任何数据非常容易。因此,该程序可以定期检查数据库中的mails_queue
表并发送电子邮件。如果您的应用程序类似,那么实现起来非常简单。
也许有一些现成的解决方案,但我没有听说过。
答案 1 :(得分:0)
我有类似的问题需要解决。我找到了这些解决方案:
最后我决定使用选项4.使用cron和curl(或wget),并且只能访问localhost的CronController
。