完了するまでに最大 30 秒かかる他の Web サイトからデータを取得する機能があります。ユーザーからの Web リクエストでこの関数を実行する必要がありますが、その時間を待たせたくありません。
現在、メソッドはビューコントローラー内から呼び出されます。
ユーザーを待たせるのではなく、自分の時間にそのメソッドを実行するにはどうすればよいですか?
完了するまでに最大 30 秒かかる他の Web サイトからデータを取得する機能があります。ユーザーからの Web リクエストでこの関数を実行する必要がありますが、その時間を待たせたくありません。
現在、メソッドはビューコントローラー内から呼び出されます。
ユーザーを待たせるのではなく、自分の時間にそのメソッドを実行するにはどうすればよいですか?
これらのリクエストを処理するバックグラウンドエージェントが必要です。私は最近、メッセージキューにbeaneater gemとbeanstalkdを使用して、このようなものを実装しました。私は神の宝石を使用してそのバックグラウンドプロセスを管理し、神のプロセスを管理するためのinitスクリプトを作成しました。ページ内のJavaScriptは、1.5秒ごとにAJAX呼び出しを行って、リクエストのステータスを照会し、リクエストが完了したときにユーザーに通知します。
その後、神がメモリリークを持っていることが知られていることを知りました。そのため、Bluepillの方が適している可能性があります。ちょうど今日、私はhttp://michaelvanrooijen.com/articles/2011/06/08-managing-and-monitoring-your-ruby-application-with-foreman-and-upstart/も見つけました。これは、バックグラウンドでのForemanとUpstartの使用について説明しています。プロセスであり、これはより単純で堅牢なアプローチのようです。次回このようなことをする必要があるときは、おそらくForeman / Upstart / beaneater/beanstalkdを試してみます。
さまざまな長所と短所から選択できるさまざまなメッセージキューがあることに注意してください。Beanstalkdは非常に応答性が高く、数分以内に実行されるプロセスに適しています。