我听说过各种后台任务工具(delayed_job、starling、workling等),但从这些工具来看,它们似乎只能运行基于模型的方法(例如User.update_counters)。
我需要能够运行控制器方法,因为它是一组相当复杂的任务,其中包括许多其他控制器方法和自定义类。
这是一个CPU密集型进程,可能需要5-10分钟才能运行,所以我希望它运行时不会影响其他用户的“正常”站点操作。
我是不是误解了其他工具的工作原理?或者还有什么是我没有考虑到的?
发布于 2009-11-14 01:41:35
公认的做法是将所有复杂的逻辑转移到模型中,并让控制器只指导请求和响应。这就是“胖模型和瘦控制器”理论所说的。将复杂的逻辑移入模型类(不一定是ActiveRecord类),您可以拥有一个由后台工具调用的rake任务。
发布于 2009-11-14 01:31:51
如果您确实需要运行控制器操作,那么可以使用cron和wget或curl。但我建议您将复杂的逻辑移出到模型或库中,这样您就可以使用您提到的某个后台工具在控制器外部调用它。
发布于 2009-11-14 03:46:03
您可能希望考虑将此复杂任务转换为rake任务。您的rake任务仍然可以引用您的模型,因此建议您尽可能多地将相关的逻辑放入其中。
此外,由于您说该任务是受CPU限制的,并且在执行时会减慢站点的速度,因此可以使用nice (假设您在UNIX系统上)来调整您的rake任务的优先级。
https://stackoverflow.com/questions/1730745
复制相似问题