Techioz Blog

Sidekiq の結果を待ってからユーザーに表示します

概要

非常に基本的な Sidekiq のタスク (GET リクエストを使用してデータをフェッチする) を実装したところです。データベースにデータを追加するには root_path でこれを行う必要があるため、データベースを更新するために何かできることはないかと考えています。ページか何かでユーザーに気付かれないようにしますか?

def index
    @q = Jobs.ransack(params[:q])
    if params_from_search_empty(@q)
      @pagy, @jobs = pagy(Jobs.all, items: Jobs::NUM_JOBS_TO_FETCH)
      FetchJobs.perform_later if @jobs.empty? || @pagy.count.empty?
      redirect_to root_path
    else
      # Search results
      @jobs = @q.result(distinct: true)
      @pagy, @jobs = pagy(@jobs, items: Jobs::NUM_JOBS_TO_FETCH)
    end
  end

ご覧のとおり、FetchJobs.perform_later はその仕事を行いますが、データベースにその結果が設定されるまで、ユーザーは root_path にリダイレクトされ、Web ページをリロードするまで何も表示されません。

ありがとう!

解決策

最大の問題はユーザーの期待です。ユースケースによっては、後の処理のためにキューに入れられたことをユーザーに知らせるだけで十分な場合があります。ユーザーは、それが表示されなくても心配することはなく、表示が完了したら自分で更新して確認します。

ユースケースによっては、電子メールまたはテキスト メッセージを送信する方が合理的になる場合があります。また、ActionCable を使用して Web UI で通知をプッシュしたい場合もあります。