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

10-15 07:23