遅延ジョブを使用してデータベースからレコードを更新しています。遅延したジョブによって更新されたレコードの数をWebページに表示したい。私はajaxポーリングを行うことができ、これまで更新されたレコードの数を表示することができますが、それはサーバーにオーバーヘッドを追加するので、ajaxポーリングは良い方法ではないと思う。ポーリングなしでWebページにバックグラウンドジョブの詳細を表示
ajaxポーリングの代替方法はありますか?
遅延ジョブを使用してデータベースからレコードを更新しています。遅延したジョブによって更新されたレコードの数をWebページに表示したい。私はajaxポーリングを行うことができ、これまで更新されたレコードの数を表示することができますが、それはサーバーにオーバーヘッドを追加するので、ajaxポーリングは良い方法ではないと思う。ポーリングなしでWebページにバックグラウンドジョブの詳細を表示
ajaxポーリングの代替方法はありますか?
また、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
};
});
注:ええ
私はそれを試してみましょう.. –
その呼ばれる 'websocket'を、それを達成するなど
puma
のようなスレッド化サーバーを使用する必要があります:) – Abhinayウェブソケットでは、バックグラウンドジョブでウェブページにデータを送信することができます –
なぜこの仕事をするにはバックグラウンドジョブが必要でしょうか?より良いオプションは、テーブルのどこかにカウントを保存し、最新の更新レコード数でウェブページを 'delayed_job'で更新することだけです。あなたは 'ActionController :: Live'モジュールを試してみることができます。それはどれほど実行可能かは分かりませんが、あなたのユースケースに合っているかどうかを確認してください。以下に例を示します。 – Abhinay