如何在 ActiveJob 从外部检索大量数据时显示加载屏幕 API

How to dispaly a holding screen whilst ActiveJob retrieves lots of data from an external API

我有一个应用程序使用 restforce 向 salesforce 发出 API 请求。

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

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

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

目前所有请求都属于销售人员休息 API limits 但我从我的开发服务器收到超时错误,因为其中一些请求可能需要 5 分钟以上的时间来处理。

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

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

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

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

即使我可以让它在后台作业中工作,我也不确定对于用户体验而言最佳做法是什么。理想情况下,我想将它们路由到一个页面,告诉它们 "hang tight, go get a coffee" 带有进度条,然后在请求完成后自动将它们路由到最终页面...

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

谁能推荐任何可以帮助我消化这个问题的精华或策略?

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

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

在用户端,简单地告诉他们后台作业正在运行,最后有一个进度指示器,并在提供作业的数据库对象告诉您准备就绪后显示结果。