2016-08-13 10 views
1

遅延ジョブを使用してデータベースからレコードを更新しています。遅延したジョブによって更新されたレコードの数をWebページに表示したい。私はajaxポーリングを行うことができ、これまで更新されたレコードの数を表示することができますが、それはサーバーにオーバーヘッドを追加するので、ajaxポーリングは良い方法ではないと思う。ポーリングなしでWebページにバックグラウンドジョブの詳細を表示

ajaxポーリングの代替方法はありますか?

+0

その呼ばれる 'websocket'を、それを達成するなどpumaのようなスレッド化サーバーを使用する必要があります:) – Abhinay

+0

ウェブソケットでは、バックグラウンドジョブでウェブページにデータを送信することができます –

+0

なぜこの仕事をするにはバックグラウンドジョブが必要でしょうか?より良いオプションは、テーブルのどこかにカウントを保存し、最新の更新レコード数でウェブページを 'delayed_job'で更新することだけです。あなたは 'ActionController :: Live'モジュールを試してみることができます。それはどれほど実行可能かは分かりませんが、あなたのユースケースに合っているかどうかを確認してください。以下に例を示します。 – Abhinay

答えて

0

また、ActionController::Liveモジュールをレールから試してみることもできます。お使いのコントローラで

:更新された値を取得するために/my_stream

class MyStreamController < ApplicationController 
    include ActionController::Live 
    def index 
    # calculate number of records... 
    response.headers['Content-Type'] = 'text/event-stream' 
    response.stream.write "Number of records updated: #{i}" 
    response.stream.close 
    end 
end 

その後、あなたのJSファイルでは、(application.jsでもよい)、このURLを指すようにコードを記述します。また、以前の値と比較することもできます。変更されている場合は置き換え、それ以外の場合は無視します。すべては、javascriptを使用して行うことができます、私はそれを把握するまであなたを残します。 JSファイルに更新された値を取得する方法の

例:

$(function(){ 
    var source = new EventSource('/my_stream'); 
    source.onmessage = function(e){ 
    console.log(e); // this is value you want to update on page 
    }; 
}); 

注:ええ

+0

私はそれを試してみましょう.. –

関連する問題