首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将控制器方法作为后台任务运行?

如何将控制器方法作为后台任务运行?
EN

Stack Overflow用户
提问于 2009-11-14 01:28:23
回答 4查看 1.5K关注 0票数 0

我听说过各种后台任务工具(delayed_job、starling、workling等),但从这些工具来看,它们似乎只能运行基于模型的方法(例如User.update_counters)。

我需要能够运行控制器方法,因为它是一组相当复杂的任务,其中包括许多其他控制器方法和自定义类。

这是一个CPU密集型进程,可能需要5-10分钟才能运行,所以我希望它运行时不会影响其他用户的“正常”站点操作。

我是不是误解了其他工具的工作原理?或者还有什么是我没有考虑到的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-14 01:41:35

公认的做法是将所有复杂的逻辑转移到模型中,并让控制器只指导请求和响应。这就是“胖模型和瘦控制器”理论所说的。将复杂的逻辑移入模型类(不一定是ActiveRecord类),您可以拥有一个由后台工具调用的rake任务。

票数 2
EN

Stack Overflow用户

发布于 2009-11-14 01:31:51

如果您确实需要运行控制器操作,那么可以使用cron和wget或curl。但我建议您将复杂的逻辑移出到模型或库中,这样您就可以使用您提到的某个后台工具在控制器外部调用它。

票数 1
EN

Stack Overflow用户

发布于 2009-11-14 03:46:03

您可能希望考虑将此复杂任务转换为rake任务。您的rake任务仍然可以引用您的模型,因此建议您尽可能多地将相关的逻辑放入其中。

此外,由于您说该任务是受CPU限制的,并且在执行时会减慢站点的速度,因此可以使用nice (假设您在UNIX系统上)来调整您的rake任务的优先级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1730745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档