1

私たちのRails Webアプリは、ユーザーがブラウザーを介して表示するために、リクエストに応じてftpからhtmlページを含むアーカイブをダウンロード/解凍する必要があります。

アーカイブは非常に大きくなる可能性があるため、ユーザーはサーバーでダウンロード/解凍するまで待つ必要があります。

ユーザーのリクエストで fork/Process.detach を呼び出す方法で進行状況バーを実装しました。これにより、ユーザーのリクエストは完了しますが、ダウンロード/解凍プロセスはバックグラウンドで実行され続けます。彼のブラウザでレンダリングされた JavaScript は、すべての準備が整うまでサーバーのステータスを確認し、解凍された HTML ページにリダイレクトします。

ユーザーが 1 つのアーカイブを要求する限り、すべてがスムーズに進みますが、同時に 2 つ以上の要求を実行しようとすると (より多くのフォークが開始されるように)、そのうちの 1 つだけが完了し、残りは期限切れになります。アウト/同乗者に殺される(?)。パッセンジャー/フォークの問題だと思います。

どうにかして修正できるかどうかわからないので、別のソリューションに切り替える必要があると思います。ソリューションは、ダウンロードの即時かつ並列処理を許可する必要があります。ユーザーが複数のアーカイブを要求した場合、それらすべてのダウンロード/解凍の進行状況を同時に確認する必要があります。

バックグラウンドの rake ジョブをすぐに実行することを考えていましたが、起動が非常に遅いようです (また、サーバーでは毎分多くの cron rake タスクが発生しています)。私が fork が好きだった理由は、起動がとても速かったからです。仕事が遅れていることは知っていますが、他のタスクにも頻繁に使用しています。しかし、キューなしですぐに同時に複数のプロセスを開始できますか?

4

2 に答える 2

1

フォークを保持し、単一の dj ワーカーを使用することで解決しました。このようにして、パッセンジャー/製品のgemsetの変更に問題なく、必要なだけ多くのプロセスを同時に開始できます(過去にバグが発生したため、回避しようとしています)

dj ワーカー内での fork が問題を引き起こす可能性があるかどうかわからないので 、遅延ジョブで fork を実行するときに尋ねました

gemset を自由に変更できる場合、おそらく wrdevos が提案するように resque を使用するか、sidekiq、または girl_friday を使用します (ただし、実行中のサーバーに依存するため、可能性は低くなります)。

于 2012-12-24T04:30:53.657 に答える
0

Resque を使用: https://github.com/defunkt/resque

bg ジョブと Resque の詳細については、こちらをご覧ください。

https://github.com/blog/542-introducing-resque

于 2012-12-21T14:18:37.650 に答える