gpt4 book ai didi

ruby-on-rails - 从 Controller 动态更改 View -带有Rails中的线程的进度栏

转载 作者:行者123 更新时间:2023-12-03 13:14:50 25 4
gpt4 key购买 nike

我的 Controller 中有一个耗时的任务,我想在该任务中触发一个简单的进度条/进度状态。

在我的 Controller 中,我有类似

threads = []
total.times do |x|
Thread.new {
the_time_taking_task(x)
#Something here to trigger the progressbar in the view
}
end

threads.each { |aThread| aThread.join }
render :action => 'some_action'

我无法在其中放置渲染,因为它会引发双重渲染错误。
我尝试将渲染器放回原处,但出现“ return can't jump across threads”错误

我正在尝试渲染,因为这似乎是我的 Controller 可以交谈以查看的唯一方法。我的方法错了吗?

想要在 View 中像这样简单的东西,该 View 通过该调用应用进度条的宽度
<div style="width: <%= (percent_val)%>px; ">

请指教。

最佳答案

是的,这是错误的方法。

Web是无状态的,您不能阻止进程渲染 View 并在另一个请求之后获取它。

好的方法是:

1)生成队列任务而不是您的线程。您可以使用delay_job,resque或队列系统,例如rabbitMQ或beanstalkD

2)添加一个 Controller ,以检查队列中的进程是否结束以及进度如何。在内部,您放入队列ID并检查是否结束,然后返回进度百分比。

最简单的方法是由Ajax完成。

关于ruby-on-rails - 从 Controller 动态更改 View -带有Rails中的线程的进度栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192663/

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