2011-12-29 14 views
1

我使用Resque/Redis的resque狀態...如何輸出resque-status的完成百分比?

https://github.com/quirkey/resque-status

我基本上要創建一個新的西納特拉方法..像下面。我只有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並不熟悉,即使IF變量顯示了正確的完成百分比,我也不知道如何在單獨的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 

回答

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 
+0

謝謝先生!完善。 – Tallboy 2011-12-29 21:25:29

+0

順便說一下,睡眠只是一個測試,讓百分比年齡的時間不是0,我會在單獨的sinatra方法。這是一個基本的問題,關於如何在'/ refresh'方法中使'status'變量可用於其他地方,如'/ getstatus'方法? – Tallboy 2011-12-29 21:26:31

+0

通常你不會在操作之間共享變量。例外情況是,如果你從另一個渲染一個動作(這可能不是你在sinatra中可以做到的事情)。因爲它是ruby,所以你總是可以定義某種狀態方法,然後調用它。我會編輯一些內容,以便了解我的意思。 – 2011-12-29 22:07:57