1
사용자가 요청을 제출 한 후 백그라운드에서 처리해야합니다. 작업이 완료되면 사용자에게 작업이 완료되었다는 메시지를 보여주고 싶습니다.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
노동자 작업을 시작하고있다 끝내지 않았다. 너.
[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
미리 감사드립니다.
미안하지만 나는 그것을 이해하지 못했습니다. 난 그냥 자바 스크립트를 렌더링하고 그래서 일부 타사 서비스 또는 도구가 필요합니다 생각하지 않습니다. – user464
불행히도 지연된 작업 실행이 사용자 환경과 연결되어 있지 않아도 해당 사용자에게 직접 응답 할 수는 없습니다. 작업은 열린 세션과 사용자가 작업을 생성 한 것에 대해 아무 것도 모르기 때문에 직접 응답 할 수 없습니다. 가장 쉬운 방법은 백그라운드에서 처리중인 개체에 플래그를 지정하고 해당 플래그의 상태를 확인하도록 경로를 설정하는 것입니다. 그런 다음 플래그가 완료되었음을 나타내는 상태가 될 때까지 사용자 클라이언트가 5 초마다 해당 경로를 폴링하게합니다. 그런 다음 사용자에게 다시 응답 할 수 있습니다. –