我感兴趣的是运行一个非常长时间的rake任务,这个任务需要几个小时才能完成,我有兴趣了解处理这个问题的最佳实践。
我找到了可能的解决方案:
cron似乎是一个简单的设置解决方案,但它是否适合长期任务?您使用什么以及您的解决方案的优点/缺点是什么?
答案 0 :(得分:30)
我个人喜欢Resque,你可以使用resque-scheduler gem处理长时间运行或定期任务。
如果您不必经常运行任务,则可以将rake任务妖魔化,以确保在SSH会话死亡或其他情况下它继续运行。
尝试这样的事情:
nohup rake my:task &
nohup
会将输出发送到您运行任务的目录中的nohup.out
,并且还会离开您的ssh会话而不会使进程死亡,其次&
会运行它作为一个守护神。
答案 1 :(得分:1)
在我创建的一个应用程序中,用户可以上传在上传时缩略图的PDF以创建预览图像。由于PDF可能非常大,缩略图可能需要一段时间,并且必须在后台运行。为此,我使用了
从好的方面来说,你可以获得漂亮的Resque GUI来查看你的工作人员,并且你有上帝在那里观察(并杀死并重新启动)失控过程(这些过程往往会发生很多“在ImageMagick中处理PDF文件”,使整个过程更加稳定可靠。
从负面来看,设置比cron工作要困难得多。但是让cron运行一个长期的,内存密集型的进程不受监控似乎对我来说是一种灾难。
希望有所帮助!