Ruby on rails Gzip在Rails/Passenger/Nginx中解压JSON柱体
我们的Rails代码中有一个函数,它接受JSON POST正文:Ruby on rails Gzip在Rails/Passenger/Nginx中解压JSON柱体,ruby-on-rails,ruby,json,compression,gzip,Ruby On Rails,Ruby,Json,Compression,Gzip,我们的Rails代码中有一个函数,它接受JSON POST正文: contacts = ActiveSupport::JSON.decode(request.raw_post.gsub("+", "")) 我知道我也可以从params[_json]中得到这个,但是我们有非常大的MBs POST body,出于某种原因没有放入params[_json],并且+也会抛出错误 由于JSON通常是从移动客户端发送的,因此优化上传大小对我们来说很重要。我们想切换到有邮政机构gzip 但是,无论我们做什么
contacts = ActiveSupport::JSON.decode(request.raw_post.gsub("+", ""))
我知道我也可以从params[_json]中得到这个,但是我们有非常大的MBs POST body,出于某种原因没有放入params[_json],并且+也会抛出错误
由于JSON通常是从移动客户端发送的,因此优化上传大小对我们来说很重要。我们想切换到有邮政机构gzip
但是,无论我们做什么,我们都会得到相同的错误,没有行号:
MultiJson::DecodeError (743: unexpected token at ''):
我们已尝试:
gzipped_contacts = Zlib::GzipReader.new(StringIO.new(request.raw_post)).read
contacts = ActiveSupport::JSON.decode(gzipped_contacts.gsub("+", ""))
这:
解决方案如下:
我非常确定这不会发生在控制器级别,因为我无法在那里记录任何内容,因此需要在中间件或服务器上完成,但我找不到任何让我们泄气的Nginx。请协助 好的,原来iPhone客户端发送了错误的标题。因此,任何遇到这种情况的人都可以在这里看到建议: 并验证您正在发送内容类型:gzip/json
gzipped_contacts = ActiveSupport::Gzip.decompress(request.raw_post)
contacts = ActiveSupport::JSON.decode(gzipped_contacts.gsub("+", ""))