1

HTML、XML、および CSV レポートを生成するコントローラーがあります。これらのレポートに使用されるクエリは、結果を返すのに 1 分以上かかります。

これらのタスクをバックグラウンドで実行し、結果をユーザーに返す最善の方法は何ですか? Backgroundrb を調べました。私のニーズにもっと基本的なものはありますか?

4

1 に答える 1

5

DelayedJobを使用してこれらのクエリを実行し、「NotificationQueue」というテーブルを追加することを検討できます。ジョブが (その結果セットとともに) 終了したら、結果セットと、そのクエリを作成したユーザーのユーザー ID を NotificationQueue テーブルに格納します。次に、ページが読み込まれるたびに (必要に応じて 15 ~ 20 秒ごとに)、そのデータベースをポーリングし、完了したクエリがあるかどうかを確認します。

DelayedJob は非常に優れています。コードを遅延ジョブにならないように記述し、次のようにコードを変更するだけです。

#Your method
Query.do_something(params)

#Change to
Query.send_later(:do_something, params)

私たちは仕事でいつもそれを使用しています、そしてそれはうまくいきます。

于 2010-02-23T15:53:02.637 に答える