ruby-on-rails - 处理对 heroku 的 PUT 请求中的 gzipped 正文

标签 ruby-on-rails ruby ruby-on-rails-3 heroku gzip

我正在开发一个通过 restful xml 接口(interface)与 iphone 应用程序通信的 Rails 应用程序。 iphone 应用程序开发人员想要 gzip 压缩他的请求正文,因为他正在发送各种媒体。我以为 heroku 会自动处理 gzip 压缩请求 (http://adam.heroku.com/past/2009/4/22/gzip_makes_a_happy_web/) 但它似乎并没有:我得到了一堆乱码文本,通过它我不知道如何应对。

我需要在我的 heroku 应用程序中设置一个设置来处理这个问题吗?或者他(iphone 开发人员)需要发送一个特定的 header 来告诉 heroku 如何处理它?<​​/p>

有点卡住了,任何建议表示赞赏! 谢谢,最大

最佳答案

我使用了 this gist 中描述的方法透明地解压缩 gzipped 请求主体。 Rails 的重要部分是将它插入到 ActionDispatch::ParamsParser 之前。在 config/environments/development.rbconfig/environments/production.rb 中:

config.middleware.insert_before ActionDispatch::ParamsParser, "CompressedRequests"

将要点的内容放入 lib/middleware/compressed_requests.rb 文件中,并确保将 lib/middleware/ 添加到 中的自动加载路径>配置/应用程序.rb:

config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/middleware)

使用它,您的应用程序永远不会知道请求已压缩,并且它应该独立于任何支持机架的网络服务器。我已经将它与 webrick 和 thin 一起使用,没有任何问题。

编辑:任何使用压缩请求正文的 HTTP 请求都应设置 HTTP header Content-Encoding: gzip。这是一个 curl 示例测试:

gzip my_file.txt
curl --header 'Content-Encoding: gzip' --data-binary @my_file.txt.gz http://example.com/path

关于ruby-on-rails - 处理对 heroku 的 PUT 请求中的 gzipped 正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6533530/

相关文章:

mysql - 关键字查询最快的数据库设计

ruby-on-rails - 在 Ruby on Rails 中将安全逻辑与模型混合?

ruby-on-rails - 更新 Stripe 的客户信用卡信息

ruby-on-rails-3 - Rails 3 : . group() 由 created_at 排序

javascript - 检测并显示表单文本区域中的链接

ruby-on-rails - Rails 在模型问题中包含模块

ruby-on-rails - Rails respond_with & Rspec Controller : Testing unsuccessful update

ruby-on-rails - Searchkick `all` 用于带有 OR 的多个数组

ruby-on-rails - 抓取图像路径后构建 URL

ruby - 实例化 capybara 浏览器并设置代理