【发布时间】:2012-04-10 06:11:31
【问题描述】:
我有兴趣运行一个运行时间很长的 rake 任务,该任务需要数小时才能完成,并且我有兴趣了解处理此问题的最佳实践。
我发现的可能解决方案:
- 设置 cron 作业
- delayed_job
- 回复
cron 似乎是一个简单的设置解决方案,但它是否适合非常长的任务?您使用什么以及您的解决方案的优点/缺点是什么?
【问题讨论】:
标签: ruby-on-rails rake delayed-job rake-task
我有兴趣运行一个运行时间很长的 rake 任务,该任务需要数小时才能完成,并且我有兴趣了解处理此问题的最佳实践。
我发现的可能解决方案:
cron 似乎是一个简单的设置解决方案,但它是否适合非常长的任务?您使用什么以及您的解决方案的优点/缺点是什么?
【问题讨论】:
标签: ruby-on-rails rake delayed-job rake-task
我个人喜欢 Resque,您可以使用 resque-scheduler gem 来处理长时间运行或周期性的任务。
如果您不必经常运行您的任务,您可以将 rake 任务妖魔化,以确保它在您的 SSH 会话终止或其他情况下继续运行。
试试这样的:
nohup rake my:task &
nohup 会将输出发送到您运行任务的目录中的nohup.out,并且还会让您的 ssh 会话在进程不死的情况下退出,其次,& 会将其作为守护进程运行。
【讨论】:
在我创建的一个应用程序中,用户可以上传 PDF 文件,这些文件在上传时带有缩略图以创建预览图像。由于 PDF 可能非常大,缩略图可能需要一段时间并且必须在后台运行。为此,我使用了
从好的方面来说,您可以使用漂亮的 Resque GUI 来查看您的工作人员的运行情况,并且您有上帝来监视(并杀死和重新启动)失控的进程(当您经常发生这种情况时) '正在 ImageMagick 中处理 PDF),使整个事情更加稳定和可靠。
不利的一面是,设置它比 cron 作业要难得多。但是让 cron 在不受监控的情况下运行一个长时间的、内存密集型的进程对我来说似乎是一场灾难。
希望对您有所帮助!
【讨论】: