我正在使用resque-status进行Resque / Redis ...
https://github.com/quirkey/resque-status
我基本上想创建一个新的Sinatra方法..如下所示。我只有2个JobsWithStatus,所以它既可以返回两个也可以返回一个特定的,我并不在乎。
post '/getstatus' do
# return status here of all kinds (or specific)
end
然后,我想使用轮询计时器每5秒检查一次状态,通过前端的jquery输出%完成率。
这就是我所拥有的
post '/refresh' do
job_id = PostSaver.create(:length => Forum.count)
status = Resque::Status.get(job_id)
redirect '/'
end
它说在文档中我只能使用status.pct_complete,但它总是返回0?即使那样,我还是不熟悉ruby的,即使变量显示正确的%完成率,我也不知道如何在单独的sinatra条目(在/ getstatus而不是/ refresh)中使该变量起作用。
我尝试了这个但是它一直返回0
post '/refresh' do
job_id = PostSaver.create(:length => Forum.count)
status = Resque::Status.get(job_id)
sleep 20
status.pct_complete.to_s
end
最佳答案
看到您关于reddit的问题…
要使状态返回非0值,您需要在运行计算期间使用at
(http://rubydoc.info/github/quirkey/resque-status/master/Resque/JobWithStatus:at)方法设置百分比。
您可能不希望在 Action 内部进行sleep
调用。计时器应该在jQuery中。
共享状态
post '/refresh' do
job_id = PostSaver.create(:length => Forum.count)
status = Resque::Status.get(job_id)
sleep 20
"{'percent_complete':#{status.pct_complete},'job_id':'#{job_id}'}"
end
然后,无论状态如何(一些jQuery#ajax调用?),您都可以从返回的JSON中获取job_id,然后在下一个请求中,您可以执行以下操作:
post '/status' do
status = Resque::Status.get(params['job_id'])
"{'percent_complete':#{status.pct_complete}}"
end
关于ruby - 如何输出resque-status的完成百分比?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8664249/