2

pluploadを使用したファイルのアップロードをサポートするBackbone.jsアプリがあります。アップロードはプロキシ(現時点ではrack-reverse-proxyですが、まもなくストレートnginxに切り替わります)を介して、APIを介して別のRailsアプリに送信されます。

このAPIはかなり長い間使用されており、数百MBのアップロードを処理できます。それが問題だとは思いません。

ただし、アップロードがBB.jsとプロキシを介して実行される場合、それらは異なるポイントで停止する可能性がありますが、ほとんどの場合、1.5MB未満のポイントで停止します。

1MB未満の複数のファイルをアップロードしようとすると、同じ状況で正常に機能することに注意してください。1MBのファイルを100個アップロードできますが、たとえば2MBを超えるファイルはアップロードできません。

BB.jsアプリからの例外は次のとおりです。

  • Uncaught SyntaxError:予期しない入力の終了
  • SyntaxError:JSON解析エラー:予期しないEOF

これにアプローチするための最良の方法は何ですか?主な原因はネットワーク接続が遅いことのようです(ファイバーベースのホームネットワークを介したサーバーへのアップロードは完了する傾向がありますが、職場のDSL回線を介したアップロードは失敗する傾向があります)が、それが途方に暮れて乾燥しているとは想像できません。

それは私たちのプロキシ設定ですか?nginxに切り替えるとこれは修正されますか?この目的のためにnginxを設定するための最良の方法は何ですか?

Maurícioのコメントに答えるために編集してください:

サーバーから何も返されません。WebKit Network Inspectorによって報告されたヘッダーは次のとおりです(ホスト名が変更されました)。

Request URL:http://our.site.com/api/files
Request Headersview source
Content-Length:131661475
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHwVBiFW8AIuh18Bt
DNT:1
Origin:http://our.site.com
Referer:http://our.site.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
Request Payload
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="name"

861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file_entry[folder_id]"

32984
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file"; filename="861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg"
Content-Type: video/mpeg


------WebKitFormBoundaryHwVBiFW8AIuh18Bt--

その後、応答はありません。インスペクターは、ステータスと時間の両方を保留中として報告します。この最新のケースでは、転送サイズは0Bですが、900K /秒に達する発信トラフィックをおそらく10〜15秒間監視し、その後通常の状態(1〜2K /秒)に戻ることができるため、データが送信されたことはわかっています。

4

1 に答える 1

0

これはすべてnginx構成に要約されます。client_max_body_sizeディレクティブが設定されていませんでした。デフォルトは1Mです。それを増やすと問題が解決したようです。

client_max_body_sizeのnginxwikiエントリ(http://wiki.nginx.org/HttpCoreModule#client_max_body_size)は次のように述べています。

「Webブラウザは通常、このようなHTTPエラーを適切に表示する方法を知らないことに注意してください。」

ChromeとSafariが413のリターンコードをどのように処理するかを確認していませんが、これがサーバーからまったく応答がないように見えた理由を説明している可能性があります。

于 2012-07-23T18:50:03.470 に答える