вы также можете использовать модуль ActionController::Live
из рельсов.
в контроллере:
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
), написать код, чтобы указать на этот адрес: /my_stream
, чтобы получить обновленное значение. Кроме того, вы можете сравнить его с предыдущим значением, и если он изменился, замените его, иначе проигнорируйте его. все может быть сделано с помощью 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
};
});
Примечание: Вы должны использовать потоковый сервер как puma
и т.д., чтобы достичь его
да его называют 'websocket' :) – Abhinay
В веб-сокете фоновая работа в рельсах отправляет данные на веб-страницу –
Зачем нужна фоновая работа для выполнения этой задачи. лучший вариант - сохранить счет где-то в таблице и продолжить, если ваша единственная проблема - обновить веб-страницу с последним количеством обновленных записей 'delayed_job'. Вы можете попробовать 'ActionController :: Live' модуль, не уверен, насколько это возможно, но посмотрите, подходит ли он вашему прецеденту. приводя пример ниже. – Abhinay