【问题标题】:How to dispaly a holding screen whilst ActiveJob retrieves lots of data from an external API如何在 Active Job 从外部 API 检索大量数据时显示加载屏幕
【发布时间】:2015-04-06 11:39:14
【问题描述】:

我有一个应用程序使用 restforce 向销售人员发出 API 请求。

具体来说,应用程序会找到一个联系人对象,返回所有相关对象的 ID,然后根据其 ID 提取每个相关对象的完整记录。

这需要很长时间,原因有两个:

  1. 对外部 API 的请求很多,每个请求通常需要几分之一秒的时间来回复,有些请求可能有 +500 个单独的请求。
  2. 每个请求通常会拉回大量数据。

目前所有请求都属于 salesforce rest API limits,但我的开发服务器出现超时错误,因为处理其中一些请求可能需要 5 分钟以上。

Rails 4.2 - 如何最好地处理这个问题?

我的问题是如何最好地让 rails 来处理这个问题?

我可以从控制器(这肯定违反了瘦控制器)或视图(通过辅助方法,这似乎是一种狡猾的 hack)触发 API 请求。

理想情况下,我想让它在后台作业中运行,但我不确定是否可以像包含辅助方法一样在作业中包含所有身份验证和其他方法?

即使我可以让它在后台工作中工作,我也不确定用户体验的最佳做法是什么。理想情况下,我想将它们路由到一个页面,告诉他们“坚持住,去喝杯咖啡”并带有进度条,然后在请求完成后自动将它们路由到最后一页......

但我不确定如何在作业完成之前生成临时显示?

任何人都可以推荐任何可以帮助我消化这个问题的宝石或策略吗?

【问题讨论】:

标签: ruby-on-rails activerecord rails-activejob


【解决方案1】:

您绝对应该为此使用后台作业。

为作业提供一个数据库对象,它将更新该对象以指示已完成,并且可能不时指示进度。

在用户方面,只需告诉他们后台作业正在运行,最终带有进度指示器,并在提供给作业的数据库对象告诉您它准备好后显示结果。

【讨论】:

  • 谢谢@Geoffroy - 我得出了同样的结论。尽管我在实施方面略有困难。我认为我的 google 搜索在 Background Jobs 和 ActiveJob(Rails 4.2 中的新功能?)之间感到困惑。我一直在使用以下指南:Active Job Basics & 5 Tips for Deploying Background Jobs in Ruby on Rails。如果还有其他很棒的指南,请为我自己和其他刚刚涉足这个领域的人发布它们!
  • ActiveJob 是一种用于创建(可能)后台作业的 API,它根据您需要的后端使用不同的适配器。您通常会启动一个 worker 来执行作业。
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多