2011-12-29 10 views
1

私は..私は基本的に新しいシナトラメソッドを作成したい... Resque/Redisのために、以下のようなものを%resque-statusの完了をどのように出力するのですか?

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

をresqueステータスを使用しています。私は2つのJobsWithStatusしか持っていないので、どちらか特定のものを返すこともあれば、本当に気にしないこともあります。

post '/getstatus' do 
    # return status here of all kinds (or specific) 
end 

は、それから私は、ステータスごとに5秒をチェックするポーリングタイマーを使用してフロントエンド上のjqueryの経由%が完全に出力したいです。

これは、私はそれが私がちょうどstatus.pct_completeを使用することができますドキュメントで述べているが、それは常に0を返す

post '/refresh' do 
    job_id = PostSaver.create(:length => Forum.count) 
    status = Resque::Status.get(job_id) 
    redirect '/' 
end 

を持って何ですか?それでも、私はRubyが新しく、変数が適切な%完了を示したとしても、その変数を別のsinatraエントリ(/ refreshではなく/ getstatus)の内部でどのように動作させるかわかりません。

しかし私はこれを試してみましたが、それが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

を返し続ける状態が0以外のものとして戻って来ている...のredditに

をあなたの質問を超えるソウ、あなたが(atを使用する必要がありますhttp://rubydoc.info/github/quirkey/resque-status/master/Resque/JobWithStatus:at)メソッドを使用して、実行中の計算中にパーセンテージを設定します。

アクション内でsleepコールを使用しないことをお勧めします。タイマーはjQueryになければなりません。


どんな状態(いくつかのjQueryの#のAJAX呼び出しを?)なっている中で、あなたがあなたの次のリクエストで返されるJSONからJOB_IDをつかむことができます次に

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 

共有状態、あなたがかもしれません

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

ありがとうございます!完璧。 – Tallboy

+0

睡眠は%年齢の時間を0にするテストと同じように、私は別のシナトラメソッドでそれを持っていきます。これは、 '/ refresh'メソッドの 'status'変数を '/ getstatus'メソッドのように他の場所で利用できるようにするための基本的な質問です。 – Tallboy

+0

一般に、アクション間で変数を共有することはありません。例外は、あなたが別のものからアクションをレンダリングしている場合です(これはsinatraで行うこともできません)。それはルビーなので、いつも何らかの状態メソッドを定義して呼び出すことができます。何かを編集して、私が何を意味するかを見ることができます。 –

関連する問題