0

コントローラーのアクションでいくつかの遅い操作を行う必要があります。ただし、応答のレンダリングのためにこの操作を待機する必要はありません。

class ProductController < ActionController
  def update
    slow_operations()
    render json: {status: 'ok'}
  end
end

renderProduct#update アクションの後にコードを移動しても、応答時間は短縮されません。

class ProductController < ActionController
  def update
    render json: {status: 'ok'}
    slow_operations()
  end
end

遅い操作を実行する前に完全な応答を強制的に返す方法は?

4

2 に答える 2

3

Rails の動作方法により、アクションが完了した後も実際の「レンダリング」が行われます。実行する必要があるのは、実行時間の長い操作をバックグラウンド プロセスにシャッフルすることです。BackgroundRbDelayed JobSidekiqなど、これを行うための宝石がたくさんあります(私の個人的なお気に入りです。主にマルチスレッドであり、開始する必要があるプロセスの数が減り、Web ベースの admin/モニタリング インターフェイス)。

これらのほとんどを始めるための Railscast もあります。たとえば、http: //railscasts.com/episodes/366-sidekiq

于 2013-01-28T23:15:02.883 に答える
1

遅いプロセスをバックグラウンド タスクにオフロードするには、ResqueGirl Fridayなどを統合する必要があります。

于 2013-01-28T23:11:06.127 に答える