0

私はこのようなコードを持っています

def validate

  if abc.nil?
    redirect_to :action => 'noInitialSelection'
  else
    redirect_to :action => 'Selection'
    script(params)
  end

end

スクリプトメソッドは、10000の名前のファイルを処理し、関連する作業を行う必要があります。ここで問題となるのは、コードが完了するまでに多くの時間がかかるため、ページが選択にリダイレクトされず、500内部サーバーエラーが発生することです。

ページを「選択」にリダイレクトして、ユーザーが正しい詳細を入力したことを確認してから、バックグラウンドでスクリプトメソッドを実行するようにします。

ありがとう

4

1 に答える 1

1

を実行するには、ジョブ キューを調べる必要がありますscript(params)。これには複数の gem があります。非常に人気のあるものはdelayed_jobです。

delayed_job をセットアップすると、メソッドは次のようになります。

def validate
  if abc.nil?
    redirect_to :action => 'noInitialSelection'
  else
    Delayed::Job.enqueue ScriptJob.new(params)
    redirect_to :action => 'Selection'
  end
end

次のようなカスタムジョブを個別に作成します

class ScriptJob < Struct.new(:params)
  def perform
    script(params)
  end
end

enqueue呼び出しは、script(params)ワーカーによる処理のためにジョブ キューに入れます。

于 2012-11-22T02:23:42.797 に答える