【问题标题】:How should I adjust my application logic for background processing? [closed]我应该如何调整我的应用程序逻辑以进行后台处理? [关闭]
【发布时间】:2013-08-03 01:58:46
【问题描述】:
我有一个网络应用程序,它使用从第三方 API 收集的数据生成报告。我已经让延迟工作在后台处理 API 调用和报告计算。我无法更新我的应用程序流程以适应后台处理。
在我使用后台处理之前...
- 用户会点击“新建报告”
- 将显示带有activity spinner 的模态视图以响应按钮单击
- 应用将处理 API 调用
- 完成后,报告将
create! 和redirect_to 报告显示页面
在后台调用 API 时,应用会重定向到空白报告(显然!)。 delay_job 有一个我可能需要使用的success 钩子,但我不确定如何从作业类/模型重定向?
【问题讨论】:
标签:
ruby-on-rails
delayed-job
【解决方案1】:
您可能会考虑创建一个新模型,例如ReportJob,表示正在进行的报告生成。这将与delayed_job 使用的延迟作业实例一一对应。最基本的ReportJob 需要两个字段:state(例如in_progress、completed 等)和report_url。 report_url 将是 nil 开始并且当作业处于 in_progress 状态时。一旦作业完成并且ReportJob 移动到completed 状态,它将由延迟的作业填充。
用于启动作业的浏览器启动的 POST 将返回新创建的 ReportJob 实例的 URL。然后,您的 JavaScript 会在此 URL 上轮询,直到其 state 转换为 completed,此时您会将 window.location.href 等设置为现在有效的 report_url URL 以显示新报告。