大型json数据返回问题

时间:2012-03-20 09:49:43

标签: ruby-on-rails

我有一个控制器动作,它返回一个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适用于具有大型数据集的生产和开发模式。但所有其他浏览器都不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

试试thin。您可以将请求代理到Thin后端,仍然使用nginx。

答案 1 :(得分:0)

AFAIK来自您的帖子和Facebook ETag的经验,您收到“304 Not modified”,因为:

  1. 您正在生产服务器中的请求中发送“HTTP_IF_NONE_MATCH”标头
  2. 并且您的记录未被更改。
  3. 如果服务器端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