Ruby 如何输出resque状态的完成百分比?
我正在对resque/Redis使用resque状态 我基本上想创建一个新的Sinatra方法。。像下面这样。我只有两份工作的状态,所以它可以返回两个或一个具体的,我真的不在乎Ruby 如何输出resque状态的完成百分比?,ruby,sinatra,redis,resque,Ruby,Sinatra,Redis,Resque,我正在对resque/Redis使用resque状态 我基本上想创建一个新的Sinatra方法。。像下面这样。我只有两份工作的状态,所以它可以返回两个或一个具体的,我真的不在乎 post '/getstatus' do # return status here of all kinds (or specific) end 然后我想通过jquery在前端使用轮询计时器输出完成百分比,该计时器每5秒检查一次状态 这就是我所拥有的 post '/refresh' do job_id = P
post '/getstatus' do
# return status here of all kinds (or specific)
end
然后我想通过jquery在前端使用轮询计时器输出完成百分比,该计时器每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
在reddit上看到你的问题 要使状态返回为0以外的值,需要使用
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中获取作业id,然后在下一个请求中,您可以执行以下操作:
post '/status' do
status = Resque::Status.get(params['job_id'])
"{'percent_complete':#{status.pct_complete}}"
end
顺便说一句,睡眠只是一个测试,让%年龄时间不为0,我将在一个单独的sinatra方法中进行测试。这是一个关于如何使“/refresh”方法中的“status”变量在其他地方可用的基本问题,比如“/getstatus”方法?通常情况下,您不会在操作之间共享变量。例外情况是,如果您正在呈现另一个操作(这在sinatra中可能不是您可以做的事情),因为它是ruby,您可以始终定义某种状态方法,然后调用它。我将在中编辑一些内容,以便您了解我的意思。还有一件事,我是否可以不必执行任何操作就获得所有jobswithstatus。获取(:job\u id)?我只有两个作业队列和一个工作队列,我希望我可以获取所有活动作业的状态并以这种方式过滤它们(名称、创建时间、状态、排队?),而不是将UUID存储到数据库中以便稍后检索。我知道这有点非常规,但这只是我的第一个应用程序,这是一个相当普遍的事情
Resque::Status.Status
将返回实际作业的数组Resque::Status.Status\u id
将返回一个id数组Resque.redis.keys(“status:*”)
将直接使用redis为您提供一个类似的列表,尽管这些键前面会加上“status”。我建议戳一下Resque和Resque::Status的源代码。里面有很多有趣的东西。我只是花了这么长时间用另一种方法。我在他们的网站上到处找。。。。。。。。ARLWEKGJWEGEWG。这本可以帮我省下几个小时来想办法:|非常感谢。。。