2016-06-20 5 views
1

Мне нужно сделать некоторую обработку на заднем плане после того, как пользователь отправил запрос. После выполнения задания я хочу показать пользователю сообщение о том, что ваша работа выполнена.Оказание javascript после delayed_job

До сих пор у меня есть этот

Lib/Работа/custom_job.rb

class CustomJob 

    def perform 
    sleep 1 # Here will do the background processing. 
    ActionView::Base.new('app/views', {}, ActionController::Base.new).render(file: 'teacher/courses/custom') 
    end 
end 

custom.js

$(document).ready(function() { 
    alert("Your job is done."); 
}); 

контроллер

class Teacher::CoursesController < ApplicationController 

    def index 
    Delayed::Job.enqueue(CustomJob.new) 
    @courses = current_teacher.courses.all 
    end 
end 

работник начать работу и закончил его без ROR.

[Worker(host:Aragorn pid:3360)] Job CustomJob (id=16) COMPLETED after 1.0635 
[Worker(host:Aragorn pid:3360)] 1 jobs processed at 0.9035 j/s, 0 failed 

Заранее спасибо.

ответ

0

Вам нужно будет иметь какой-то интерфейс опроса на лицевой стороне, который ищет полное событие на объекте на задней панели или использовать какой-то сервис, например pusher.com.

Мы делаем это часто, и это один из лучших образцов, которые мы нашли, что позволит пользователю перезагрузить/оставить страницу и вернуться к уведомлению, которое все еще доступно, если оно все еще ожидает завершения.

Possible example to check out

+0

Извините, но я не понял. Я просто хочу отобразить javascript и не думаю, что потребуется какой-то сторонний сервис или инструмент. – user464

+0

К сожалению, характер отложенной работы, отключенной от опыта пользователей, не позволит вам получить прямой ответ на этот пользователь. Поскольку работа ничего не знает о открытых сеансах и какой пользователь породил задание, вы не можете напрямую ответить на них. Самый простой способ - иметь флаг на объекте, который вы обрабатываете в фоновом режиме, и установить маршрут для проверки состояния этого флага. Затем попросите пользователей опросить этот маршрут каждые 5 секунд, пока флаг не будет в состоянии, показывающем, что оно завершено. Затем вы можете ответить пользователю. –