2011-08-31 102 views
6

所以我有一個相當惱人的問題與文件上傳在塔上,我希望有人能夠幫助我。本來我發佈的問題here認爲這是一個問題與塔,但我從那裏得出結論,這個問題是由於服務器,即粘貼,我已經確切地追查問題發生的地方,但我不確定如何解決它。行爲如下。我有一個Pylons網絡應用程序,我通過貼紙服務。應用程序的一部分允許用戶將文件上傳到系統,有時這些文件可能很大(> 50mb)。在這樣的上傳,服務器偶爾重置連接(即,在Chrome中的錯誤顯示爲「錯誤101(淨值:: ERR_CONNECTION_RESET):連接被重置。」)這不總是發生,只有約50%的大文件的時間。連接重置在(大)文件上傳

在這些情況下,服務器永遠不會手中的POST到應用層面。沒有例外(至少,我可以找到)。我將問題縮小到cascade.py(特別是從httpserver.py調用的wsgi_application方法)。從後者:

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

在cascade.py的呼叫功能,該文件顯示被寫入到一個臨時文件。有關循環在開始:

而copy_len> 0:

它然後寫入塊逐一打開文件。這些寫入都不會引發異常。然而,服務器通常會在這些寫入過程中「離開」,似乎是隨機的(時間似乎與此無關)。因此,如果我打印出正在減少的copy_len大小,我看它減少了一個點,然後服務器突然發送'連接重置'(或至少客戶端認爲它是)以及方法似乎退出了(copy_len停止打印,就好像循環已經退出,儘管它不是0)。

我完全難倒,因爲1)這只是發生零星,和2)我似乎無法追蹤到實際的錯誤/例外 - 只是有點它...死亡。

如果它的事項,我跑貼1.7.3,Python 2.7版和Fedora操作系統。有沒有人對任何可能發生的情況有所瞭解,以及我如何能夠解決這個問題?非常感謝您的幫助。

回答

1

兩個想法浮現在腦海中......

  • 測試與另一個更強大的Web服務器,如nginx。如果需要,它可以同時運行。看看問題是否仍然存在。雖然粘貼可以處理Web應用程序,但據我所知,它並不意味着要處理巨大的文件傳輸。
  • 您在上傳過程中是否使用Chunked Transfer Encoding
+0

+1這可能是一個web服務器問題比python/pylons更多的問題。 – Kekoa

0

我在Ubuntu 10.04上使用apache 2.2 + mod_python 3.3沒有問題。我已成功上傳大文件(400mb)。

我用uploader構建HTML上傳表單。