2011-08-31 32 views
6

だから、誰かが私を助けてくれることを望んでいると思うパイロンズのファイルアップロードには厄介な問題がある。もともと、私はこの問題をPylonsの問題であると考えていたhereという名前を投稿しましたが、その問題はサーバー、つまりペーストに起因すると判断しています。問題がどこで発生したのかを正確に追跡しましたが、それを解決する方法。その動作は次のとおりです。私はパスタを介して提供しているPylons Webアプリケーションを持っています。 1つのアプリケーションでは、ユーザーがファイルをシステムにアップロードすることができますが、時にはこれをかなり大きくすることもできます(50MB以上)。このようなアップロード中、サーバは接続を散発的にリセットします(つまり、エラー101(net :: ERR_CONNECTION_RESET):接続がリセットされたというエラーが表示されます)。は常にの約50%大きなファイルを持つ時間。(大)ファイルアップロード時に接続がリセットされる

これらの場合、サーバーはアプリケーションレベルまでPOSTを実行しません。例外はスローされません(少なくとも私が見つけることができます)。私は問題をcascade.py(特にhttpserver.pyから呼び出されるwsgi_applicationメソッド)に絞り込んだ。後者から:cascade.pyのコール関数で

結果= self.server.wsgi_application(self.wsgi_environ、self.wsgi_start_response)

、ファイルに書き込まれているように見えます一時ファイル。 > 0 copy_lenながら

:関連ループがで始まる

それはその後、開いているファイルにチャンク一つずつを書き込みます。これらの書き込みのいずれも個別に例外をスローしません。しかし、サーバーはしばしばこれらの書き込み中に、単にランダムに(時間はこれと相関関係がないように見える)単純に「離れる」でしょう。だから、もし私が減らしているcopy_lenサイズをプリントアウトすると、私はそれをポイントまで減らしてから、サーバーが突然「接続リセット」(あるいは少なくともクライアントはそれが思う)とメソッド(ループが終了したように、0になっていなくても、copy_lenは印刷されなくなります)。

1)これは散発的にしか起こらず、2)私は実際のエラー/例外を追跡できないように見えます。

私はペースト1.7.3、Python 2.7、Fedora OSを実行しています。誰が何が起こっているのかについての洞察を持っていると私はこれを解決することができるかもしれません?助けてくれてどうもありがとう。

答えて

1

つのアイデアが...気になるなnginxなどの別の、より堅牢なウェブサーバと

  • テスト、。必要に応じて同時に実行することができます。問題が解決しない場合は、参照してください。ペーストはウェブアプリを扱うことができますが、私が知る限り、巨大なファイル転送を処理することはできません。
  • アップロード中にChunked Transfer Encodingを使用していますか?
+0

+1 Webサーバーの問題は、python/pylonsの問題以上の可能性があります。 – Kekoa

0

私はUbuntu 10.04でApache 2.2 + mod_python 3.3を使用しても問題ありません。私は大容量ファイル(400MB)をアップロードしました。

uploaderを使用してhtmlアップロードフォームを作成しました。

関連する問題