处理非常长时间的rake任务

我有兴趣运行一个非常长时间的rake任务,一个需要几个小时才能完成的任务,我有兴趣了解处理这个问题的最佳实践。

我发现可能的解决方案:

  1. 设置一个cron作业
  2. delayed_job的
  3. resque

cron似乎是一个简单的设置解决方案,但它是否适合长期任务? 您使用什么以及您的解决方案的优点/缺点是什么?

我个人喜欢Resque,你可以使用resque-scheduler gem处理长时间运行或定期任务。

如果您不必经常运行任务,则可以将rake任务妖魔化,以确保在SSH会话死亡时继续运行。

尝试这样的事情:

nohup rake my:task & 

nohup会将输出发送到你运行任务的目录中的nohup.out ,并且还会让你的ssh会话没有进程死亡,其次&将把它作为deamon运行。

在我创建的一个应用程序中,用户可以上载在上传时缩略图的PDF以创建预览图像。 由于PDF可能非常大,缩略图可能需要一段时间,并且必须在后台运行。 为此,我用过

  • 用于上传的回形针 ,
  • delayed_pa​​perclip gem将缩略图移交给后台进程,
  • 由Redis支持的Resque ,用于处理工作队列,以及
  • 神gem,推出Redis和Resque工作人员并监控整个shebang。

从好的方面来说,你可以获得漂亮的Resque GUI来查看你的工作人员,并且你有上帝在那里观察(并杀死并重新启动)失控过程(当你处理时往往会发生很多事情) ImageMagick中的PDF文件,使整个过程更加稳定可靠。

从负面来看,设置比cron工作要困难得多。 但是让cron运行一个长期的,内存密集型的进程不受监控似乎对我来说是一个灾难。

希望有所帮助!