1
ユーザーがリクエストを送信した後、バックグラウンドで何らかの処理を行う必要があります。仕事が終わった後、私はあなたの仕事が完了したことをユーザーに伝えたい。delayed_jobの後にjavascriptをレンダリングする
これまでのところ、私はこの
の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
ありがとうございます。
申し訳ありませんが、わかりません。私はちょうどjavascriptをレンダリングしたいと思うので、サードパーティのサービスやツールが必要になるとは思わない。 – user464
残念ながら、遅延されたジョブの実行がユーザーエクスペリエンスから切断されても、そのユーザーに直接応答することはできません。ジョブは開いているセッションとユーザーがジョブを生成したことについて何も知らないので、ユーザーはジョブに直接応答することはできません。 最も簡単な方法は、処理中のオブジェクトにバックグラウンドでフラグを設定し、そのフラグの状態を確認するようにルートを設定することです。その後、フラグが完了したことを示す状態になるまで、ユーザーのクライアントに5秒ごとにそのルートをポーリングします。その後、ユーザーに返信することができます。 –