处理很长时间的耙子任务
问题描述:
我有兴趣运行一个很长时间的耙子任务,需要几小时才能完成,我有兴趣了解处理这个问题的最佳实践。处理很长时间的耙子任务
可能的解决方案,我发现:
- 设置cron作业
- delayed_job的
- resque
的cron似乎是一个简单的解决方案来建立,但它是理想的一个很长的任务?你使用什么,你的解决方案有哪些优点/缺点?
答
我个人喜欢Resque,你可以使用resque-scheduler gem来处理长时间运行或周期性任务。
如果你不需要经常运行你的任务,你可以将rake任务妖魔化,以确保它在SSH会话死亡或者其他情况下继续运行。
尝试是这样的:
nohup rake my:task &
nohup
将输出发送到nohup.out
在您运行任务的目录,也将让留下您的SSH会话,而过程中死亡,其次是&
将运行它作为一个deamon。
答
在我创建的一个应用程序中,用户可以上传上传时缩略图创建预览图像的PDF文件。由于PDF可能非常大,缩略图可能需要一段时间,并且必须在后台运行。要做到这一点,我用
- Paperclip用于上传,
- 的delayed_paperclip宝石缩略移交给后台进程,
- Resque,通过Redis后盾,以处理工作队列,并
- 的God宝石,发射Redis和Resque工作人员并监控整个shebang。
从积极的一面,你会得到漂亮Resque GUI在行动查看你的员工,你已经有了上帝那里观看(并杀死,并重新启动)失控的进程(这往往发生相当当你在ImageMagick中处理PDF时),使整个事情更加稳定和可靠。
从负面来看,这比建立cron工作困难得多。但是让cron运行一个长时间的,不受监控的内存密集型进程似乎对我来说是一场灾难。
希望有帮助!
这看起来好像完全符合我的需求。在接受其他人的意见之前,我会先保留这个问题一段时间。谢谢! – 2012-03-26 18:42:24
没有问题!我希望你找到你正在寻找的解决方案!一旦找到它就发布你的解决方案! – 2012-03-26 20:24:45