2011-12-29 2 views
1

Я использую Resque-статус Resque/Redis ...Как выполнить вывод% из resque-status?

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

Я в принципе хочу, чтобы создать новый метод Синатры .. что-то вроде ниже. У меня только 2 JobsWithStatus, чтобы он мог либо вернуть оба, либо конкретный, я действительно не забочусь.

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? Даже тогда я новичок в рубине и даже если переменная показала правильную% полной, я не уверен, как заставить эту переменную работать внутри отдельной записи 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, вам нужно использовать at (http://rubydoc.info/github/quirkey/resque-status/master/Resque/JobWithStatus:at), чтобы установить процент во время выполненного расчета.

Возможно, вы не хотите, чтобы sleep звонил внутри действия. Таймер должен находиться в jQuery.


Sharing Статус

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 вызов?), Вы можете захватить job_id из возвращаемой JSON, а затем с помощью следующего запроса, вы могли бы что-то вроде:

post '/status' do 
    status = Resque::Status.get(params['job_id']) 
    "{'percent_complete':#{status.pct_complete}}" 
end 
+0

спасибо, сэр! Отлично. – Tallboy

+0

Кстати, сон был таким же, как тест, чтобы дать% age время не быть 0, я буду иметь это в отдельном синатра-методе. Это основной вопрос о том, как сделать переменную 'status' в методе '/ refresh' доступной где-то в другом месте, например метод '/ getstatus'? – Tallboy

+0

Как правило, вы не собираетесь делиться переменными между действиями. Исключение было бы, если бы вы выполняли действие от другого (что может быть не то, что вы можете сделать даже в синатре). Поскольку это рубин, вы всегда можете определить какой-то метод статуса и просто вызвать его. Я кое-что отредактирую, чтобы вы могли понять, что я имею в виду. –

 Смежные вопросы

  • Нет связанных вопросов^_^