在Rails中旋转背景任务

时间:2008-12-23 02:32:34

标签: ruby-on-rails ruby unix

为Rails应用程序创建后台任务的首选方法是什么?我听说过Starling / Workling以及优秀的'脚本/跑步者',但我很好奇哪个正在成为管理这种需求的实际方法?

谢谢!

澄清:我喜欢Rake in Background的想法,但问题是,我需要一些不断运行或每10小时运行的东西。我不会奢侈地坐在Web请求上,它需要由服务器启动,与我网站上发生的活动异步。

8 个答案:

答案 0 :(得分:21)

Ryan Bates制作了三部精彩的截屏视频,可能对您有所帮助:

  1. Rake in Background
  2. Starling and Workling
  3. Custom Daemon
  4. 他谈到了使用每种方法的各种利弊。这应该可以帮助您入门。

答案 1 :(得分:5)

这取决于您的需求。

试用delayed_job,这是由Shopify创始人Tobi delayed_job(2011年最后更新)创建的。

DHH deleayed_job(2008年最后更新)和collectiveidea delayed_job(最近更新于20天前,截至2014年6月28日)有分叉。

答案 2 :(得分:3)

我通常依赖cronjob scheduling,因为它提供了灵活性,而无需编写单独的代码来安排它。任何可以从shell执行的东西都可以安排!无论是任何脚本(ruby / rake task / py / bash /您喜欢的任何其他),都可以轻松实现cronjob调度。

如果在Windows上运行,可以使用scheduled tasks

希望这有帮助。

答案 3 :(得分:1)

async_observer是最好的。它不会做各种愚蠢忙碌的等待事情,也不会在像starling这样的工人崩溃中失去工作,没有数据库轮询等等......并且它非常好地集成到rails中。

我通过它推送的工作,它几乎不关心。

答案 4 :(得分:1)

已经提到的大多数插件都可以完成这项工作,但是如果您只需要按设定的时间表运行Rake任务,那么就没有必要开始投入更多的架构了。

只需添加执行

的cron作业即可

“cd / path / to / rails / app; RAILS_ENV = production rake run:my:task”

为什么重新发明轮子,当像操作系统这样的Unix几十年来按计划运行任务时?

答案 5 :(得分:0)

我过去曾使用过守护进程插件。

答案 6 :(得分:0)

虽然我不知道它是否成为标准,但我在BackgroundRB取得了巨大的成功。我有几个工作人员,一些是由用户操作触发的长时间运行任务,而另一些是按计划启动的。

答案 7 :(得分:0)

看看Taskr。它基本上像cron,但有一个RESTful Web界面。您可以使用它来安排任务以定期连接到您的Rails应用程序并触发任意代码(通过Taskr4rails插件)。这意味着很好地适应围绕RESTful服务构建的系统,如果任务返回错误,无法运行等,它可以通知您。