Rails 3 + delayed_job:如何跟踪任务的进度(例如在首页上显示进度条)?

4
延迟任务终于对我有用了(在RoR3中使用collectiveidea gem),用于一些任务。第一个任务是管理员上传图库的zip文件并提取每个图像以构建属于该图库的照片对象。第二个任务是删除图库。这些图库可能很大(约3分钟内有550张图片),即使它没有完全显示,我也希望能够显示图库仍在处理或排队等待删除。
现在,我只是使用默认技术(@gallery.delay.extract_photos和@gallery.delay.destroy)。
当管理员单击提取链接时,他们将被重定向到图库页面(为空白),并显示一个快闪消息告诉他们正在处理图库。定期刷新页面会显示已提取到的图像列表。但是,由于刷新一次会清除快闪消息,因此不太清楚作业何时完成。基本上,我想能够显示每秒更新的进度条或数量进度旁边的进度 ([======] 33/86),并/或更新图库以显示添加的图像。
删除大型图库也可能需要很长时间,因此我也希望将其保留为延迟的工作。但是,在删除后转到着陆页时,图库仍然存在,因此直到完全消失后刷新后才会显示。我想要的是要么有一种标记它为排队等待删除的方法,要么显示进度条,并在删除完成后消失。
我寻找RoR3 AJAX帮助,但似乎我找到的所有内容都是针对2.3.8的,而且已过时。此外,我需要知道如何跟踪作业是否仍在执行,我还没有在collectiveidea的文档中发现类似的东西。我想,由于作业存储在表中,也许我可以使用DelayedJob.thisjob.exists?或类似的东西来跟踪它,但尝试在rails控制台中使用DelayedJob.all只给我带来了错误(即使作业正在运行)。
因此,我的问题概括如下:如何跟踪延迟的作业并以任何这些方式在视图中显示其进度? [编辑] 我知道我可以在图库页面上进行活动轮询,但我不想一直发生这种情况-只有在执行作业(或已安排)时才会发生。是否有一种测试正在执行或计划执行作业的方法?因为我没有找到一种在视图中跟踪它的方法。
谢谢。
2个回答

3

部分响应...

有没有一种方法可以测试正在执行或计划执行的作业是否存在?

您可以使用

Delayed::Job 

获取队列中的Active Record作业及其状态。

Delayed::Job.find :all , :conditions=>"locked_at IS NOT NULL"

我建议您使用Resque来对进程进行精细控制。

1

您有使用Nginx及其上传模块的选项吗?希望如此,因为这将全面提高您的应用性能。请查看Gautam Rege的博客文章,他在其中使用Nginx、Rails和Delayed Job进行相对较大的上传:

http://blog.joshsoftware.com/2010/10/20/uploading-multiple-files-with-nginx-upload-module-and-upload-progress-bar/

该文章没有提到他是否使用Rails 3,但由于Nginx正在处理上传,因此那里没有太多的Rails代码,如果需要的话,您应该能够进行调整。

我正在使用Dreamhost,如果您有PS帐户,则Nginx是可选功能,但我目前无法/不愿承诺。我不确定这是否完全是我要寻找的解决方案,但这绝对是我将来项目阶段会考虑的事情。 - Josh Kovach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接