時間がかかるキャリアウェーブ タスクに遅延ジョブを使用しています。
現時点では、成功へのフックを備えた単純なジョブを作成しました。次のようになります。
class VideoclipDownloadJob
def initialize(video_id)
@video_id = video_id
end
def perform
Videoclip.grab_videoclips(@video_id)
end
def success(job)
Rails.logger.info { "Videoclip downloads for video: #{@video_id} complete" }
Video.find(@video_id).update_attribute(:videoclips_downloaded, Time.now)
end
end
問題なく動作し、現在、ブラウザーに AJAX ポーリングを実装して、ジョブの完了とリダイレクトを確認しています。
ただし、このアプローチには 2 つの問題があるため、アドバイスをいただければ幸いです。
まず、現在ユーザーが JavaScript を持っていない場合、ジョブの完了後にユーザーをリダイレクトする方法がありません。
redirect_to
したがって、私は自分の仕事のサクセス フックにa を含めたいと考えています。これを成功せずに success(job) メソッドに直接追加し、モデルにそれを行うメソッドを作成しようとしました。
その時点で、これは良い MVC パターンとは思えないことに気付きました。
したがって、純粋にJavaScriptに依存する必要がありますか、それともより良い代替手段がありますか?
2 番目の質問は、Carrierwave の使用に関するものです。
ファイルの基本的な転送には問題なく機能していますが、ファイルが非常に大きくなる可能性があるため、ダウンロードと完了の 2 つの状態だけでなく、実際の転送の進行状況 (パーセンテージ) も表示できるようにしたいと考えています。移行。
クライアント側では、ジョブと同じ方法でこの情報をポーリングできます。
しかし、Carrierwave のドキュメントには、アップローダの特定の進行状況を確認する方法についての言及は見つかりません。
これら 2 つのことを達成するための最善の方法についてアドバイスをいただければ幸いです。
ありがとう、
クリス