如何输出resque-status的完成百分比?

时间:2011-12-29 05:16:50

标签: ruby sinatra redis resque

我正在使用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

1 个答案:

答案 0 :(得分:2)

在reddit上看到你的问题...

要让状态恢复为0以外的状态,您需要使用athttp://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