2012-03-20 7 views
3

json構造を返すコントローラアクションがあります。大きなjsonデータの返信問題

render :json => hash_data 

これは、本番モードと開発モードの両方で小さなデータセットで機能します。ただし、大規模なデータセットの場合、これは開発モードでのみ機能します。プロダクションモードでは、json文字列の一部のみが返されます。 Railsのバージョンは3.0.9です。プロダクションモードでは、ロードバランサからnginxに移動します。開発モードでは:私はwebrickを使用します。

プロダクションモードHTTP応答ヘッダー:

Cache-Control max-age=0, private, must-revalidate                                     
Connection  close                                             
Etag   "a7b077a364f849a57ffe582525c98ea1"                                     
Server   nginx/1.0.10 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)                               
Status   304                                             
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.11                                   
X-Runtime  8.462971                                            
X-UA-Compatible IE=Edge,chrome=1 

開発モードHTTP応答ヘッダー:

Cache-Control max-age=0, private, must-revalidate                                      
Connection Keep-Alive                                             
Content-Length 144561                                             
Content-Type application/json; charset=utf-8                                       
Date Tue, 20 Mar 2012 08:37:30 GMT                                         
Etag "b6b9cdb7811577280320f7a3f50bd937"                                        
Server WEBrick/1.3.1 (Ruby/1.9.2/2010-08-18)                                       
X-Runtime 12.832829                                             
X-UA-Compatible IE=Edge 

さらに奇妙な、Chromeは大規模なデータセットでの生産と開発の両方のモードのために正常に動作します。しかし、他のすべてのブラウザは動作しません。どんな助けでも大歓迎です。

+0

どのくらい大きいですか? 144561バイトはそれほど大きくないのですか? – Vapire

+0

いいえ、そうではありません。だからこそ、それはとても驚くべきことです。私はそれがhttpsに関連しているかどうかわかりません。私は生産のためにhttpsを使い、開発のためにhttpを使うからです。 – user612308

+0

こんにちは。これに関する更新はありますか?私は同じ問題を抱えています。/。さらに奇妙なことに、最初の要求の直後に要求がやり直された場合、応答は正常に行われます。あなたはnginx +の乗客を使用していますか? – robertokl

答えて

0

お試しthin Thinバックエンドに要求をプロキシしても、nginxを使用することができます。

+0

私は同じ問題を抱えていました。プロダクションでは – Bjoernsen

+0

、私はWEBrickではなくNginxを使用しています。 – user612308

0

私の知る限り、あなたのポストやFacebookのETagの経験から、あなたは「304は変更されません」を受信して​​いるので:あなたは本番サーバでのリクエスト

  • とあなたのレコードから「HTTP_IF_NONE_MATCH」ヘッダを送信している

    1. あり変更されていません。

    サーバー側のetagがHttp-If-None-Matchのetag値と一致しない場合、要求は200応答しか得られません。一致すれば、 "304 Not modified"が表示されます

    私は生産環境を推測します。 etagをオンにし、envを開発する、そうしなかった。

    これをご覧ください。http://archives.ryandaigle.com/articles/2008/8/14/what-s-new-in-edge-rails-simpler-conditional-get-support-etags

  • +1

    chromeが適切に処理する理由は、chromeが304応答を検出し、ブラウザのキャッシュを使用して200として処理することです。他のブラウザもそれを行う必要がありますが、JSONリクエストではありません。 – allenhwkim

    関連する問題