1

次のような状況があります。

  1. コントローラーでアクションを実行する URL を呼び出します。アクションはかなり長時間実行されます。XML の大きな文字列を構築し、PDF を生成し、完了時にリダイレクトすることになっています。

  2. 約 60 秒後、ブラウザは 200 を取得しますが、コンテンツ タイプが「application/x-unknown-content-type」で、本文も応答ヘッダーもありません (タンパーを使用してヘッダーを確認します)。

  3. コントローラー アクションは実際には完了するまで実行され続け、PDF が生成されます。

これは私たちの本番環境で発生しており、コントローラーのアクションが完了するまで実行され、期待どおりにリダイレクトされます。

どこを見るべきか提案はありますか?

Rails 2.2.2 を Apache/Phusion Passenger で実行しています。

ありがとう、

4

2 に答える 2

1

ユーザーを座って待つのではなく、このタスクをジョブキューにぶつけて、すぐに戻ることを検討します。そうしないと、多くの人がこれを使おうとして、新しい接続を処理するために利用可能なRailsアプリインスタンスが不足するという問題の世界に向かっています。

これを簡単に行う1つの方法は、Ajax投稿を使用してドキュメントの作成をトリガーし、これを遅延ジョブにドロップしてから、待機中のユーザーにジョブのステータスを通知するajaxを介して10秒間の定期チェックを実行することです。delayd_jobがバックグラウンドでタスクの処理を終了し、データベース内の何かを更新して完了したことを示したら、ajaxを介してユーザーを新しく作成されたドキュメントにリダイレクトできます。

于 2009-05-08T23:33:26.730 に答える
1

100% 確実ではありませんが、おそらく Apache が Rails アプリケーションへのリクエストをタイムアウトさせているのでしょう。Apache の Timeout ディレクティブを高く設定してみてください。何かのようなもの:

Timeout 120
于 2009-04-16T18:15:49.087 に答える