在rails 3.2 app中,后台作业完成后更新页面的最佳方法是什么?

时间:2013-04-19 01:19:57

标签: ruby-on-rails ajax ruby-on-rails-3

我的rails 3.2应用程序有一个报告页面经常需要90多秒才能呈现,因此我将report-builder作为delayed_job任务运行,然后显示“等待一分钟”视图(带有刷新按钮),直到内容为止ready(视图中使用content_ready标志,以显示“等待消息”或报告(视情况而定)。在我的原型中,用户必须手动刷新页面,直到设置content_ready(然后呈现报表视图)。

我想在content_ready为真时自动刷新页面。

实现这一目标的最简单方法是什么,因为它是一个很少被命中的页面,因此效率低下的方法,例如告诉用户的浏览器每10秒轮询服务器(或重绘整个页面),这很好吗? / p>

2 个答案:

答案 0 :(得分:1)

在页面上设置元刷新或使用jjery更新程序(如果使用jquery,see here)检查特定的控制器操作,该操作会告诉您作业是否已完成,或者该文件是否存在于该位置预期

或者,假设您正在使用delayed_job gem,请查看作为作业排队执行的一部分提供的挂钩。有关gem's GH page的文档。

答案 1 :(得分:1)

我建议采用以下策略:

  • 创建延迟作业后,立即将作业的ID传回浏览器。
  • 在您的网站上公开将返回作业状态的端点。
  • 使用jQuery + setTimeout或setInterval命中端点。
  • 完成作业后,将用户重定向到相应的页面。

这是一个非常简单的策略,但它确实有效。