gpt4 book ai didi

ruby-on-rails - 在 Rails 中为长期运行 (Open4) 流程构建进度指示器

转载 作者:数据小太阳 更新时间:2023-10-29 08:09:44 27 4
gpt4 key购买 nike

我将以项目符号的形式列出这种情况,希望尽可能简单地描述问题。

我正在努力完成以下任务:

  • 用户提交表单,保存记录,然后触发长时间运行的 fork 进程
  • 在 View 中,用户被重定向(到显示操作),用户应该看到所述 fork 进程的实时进度指示器。
  • fork 进程知道记录 ID 并且可以实例化它,因为记录已经保存
  • 记录的模型有一个“状态”的 attr_accessor
  • fork 进程的标准以我选择的任何增量返回完成百分比

问题:

  • 我无法获取“self.status”,甚至无法获取记录(显示) View 范围内的实例化“@record.status”(在 open4 进程中定义)
  • 在用户被重定向到的“显示”页面上,尽管 fork 进程更新了“状态”字段值,但它并未更新(假设这是因为该值仅在请求之间保存)
  • 在尝试保存到 session 变量时,显然“ session ”对于模型中定义的 fork 进程不可用(对此的解决方案看起来真的很老套)。

问题:解决此问题的最佳方法是什么?我假设为长时间运行的流程实现进度指示器是一项非常常见的任务,我只是不确定实现它的最佳方法。我有一些使用 session[:status] 并将其范围限定到模型的想法,但我想听听一些更好的建议。我还担心许多(100 个?)这些进程正在运行的可能性,通过 session 跟踪它们的进度是个好主意吗?也许我应该将有问题的代码移出模型,并将“ session ”置于范围内?

任何想法都会很棒。仅供引用,在前端,我只是计划每 3 秒左右从 ajax 请求中轮询一次“状态”对象。因此,将值保留在数据库中将是一个非常糟糕的主意。

最佳答案

首先,你应该将你长时间工作的进程百分比写入 Rails 缓存,例如,Rail.cache.write("#{record_id}_status", 0.1),直到工作完成了,执行Rail.cache.write("#{record_id}_status", 1),你可以控制进程的百分比,然后,在您的显示页面中,您知道 record_id,使用 ajax 轮询 Rails 服务器 Rails.cache.read("#{record_id}_status") 中 record_id 的状态,这样它就会知道页面中的百分比

关于ruby-on-rails - 在 Rails 中为长期运行 (Open4) 流程构建进度指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com