HTML、XML、および CSV レポートを生成するコントローラーがあります。これらのレポートに使用されるクエリは、結果を返すのに 1 分以上かかります。
これらのタスクをバックグラウンドで実行し、結果をユーザーに返す最善の方法は何ですか? Backgroundrb を調べました。私のニーズにもっと基本的なものはありますか?
HTML、XML、および CSV レポートを生成するコントローラーがあります。これらのレポートに使用されるクエリは、結果を返すのに 1 分以上かかります。
これらのタスクをバックグラウンドで実行し、結果をユーザーに返す最善の方法は何ですか? Backgroundrb を調べました。私のニーズにもっと基本的なものはありますか?
DelayedJobを使用してこれらのクエリを実行し、「NotificationQueue」というテーブルを追加することを検討できます。ジョブが (その結果セットとともに) 終了したら、結果セットと、そのクエリを作成したユーザーのユーザー ID を NotificationQueue テーブルに格納します。次に、ページが読み込まれるたびに (必要に応じて 15 ~ 20 秒ごとに)、そのデータベースをポーリングし、完了したクエリがあるかどうかを確認します。
DelayedJob は非常に優れています。コードを遅延ジョブにならないように記述し、次のようにコードを変更するだけです。
#Your method
Query.do_something(params)
#Change to
Query.send_later(:do_something, params)
私たちは仕事でいつもそれを使用しています、そしてそれはうまくいきます。