我正在使用Resque / Redis的resque-status ...
https://github.com/quirkey/resque-status
我基本上想要创建一个新的Sinatra方法..如下所示。我只有2个JobsWithStatus,所以它可以返回两者或特定的一个,我真的不在乎。
post '/getstatus' do
# return status here of all kinds (or specific)
end
然后我想使用轮询计时器在前端通过jquery输出%complete,每隔5秒检查一次状态。
这就是我所拥有的
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
答案 0 :(得分:2)
在reddit上看到你的问题...
要让状态恢复为0以外的状态,您需要使用at
(http://rubydoc.info/github/quirkey/resque-status/master/Resque/JobWithStatus:at)方法在正在运行的计算过程中设置百分比。
您可能不希望在操作中进行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