Gar*_*eld 1 multithreading ruby-on-rails render progress-bar
我有时间在我的控制器中执行任务,我想在我的视图中触发一个简单的进度条/进度状态.
在我的控制器中我有类似的东西
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'
Run Code Online (Sandbox Code Playgroud)
我不能在那里放一个渲染,因为它会抛出一个双渲染错误.我尝试放一个渲染并返回那里,我得到了return can't jump across threads'错误
我正在尝试渲染,因为它似乎是我的控制器可以查看的唯一方式.我的方法有误吗?
想要通过该调用应用进度条宽度的视图中需要这样简单的东西
<div style="width: <%= (percent_val)%>px; ">
Run Code Online (Sandbox Code Playgroud)
请指教.
是的,这是一个错误的方法.
Web是无状态的,您无法阻止进程呈现视图并通过另一个请求获取它.
好方法是:
1)生成队列任务而不是你的线程.您可以使用delayed_job,resque或queue系统,如rabbitMQ或beanstalkD
2)添加一个控制器来检查队列中的进程是否结束以及进度如何.在里面,你输入队列ID并检查是否结束并返回进度百分比.
最简单的方法是通过Ajax做到这一点.
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |