以前はthis solutionを使用していましたが、Rails 5 deprecatedParamsParser
ミドルウェア以来、もう動作しません。rails 5アプリケーションでgzippedリクエストを受け入れる方法は?
答えて
だけ追加:
# config/initializers/middlewares.rb
require 'compressed_requests'
Rails.application.configure do
config.middleware.insert_after Rack::Sendfile, CompressedRequests
end
# lib/compressed_requests.rb
# Copy the file from the article
あなたはでそれをテストすることができます。
# config/routes.rb
post '/', to: 'welcome#create'
# app/controllers/welcome_controller.rb
class WelcomeController < ActionController::Base
def create
render json: params
end
end
し、要求を実行します。
curl --data-binary @<(echo "Uncompressed data" | gzip) \
-H "CONTENT_ENCODING: gzip" \
localhost:3000
{"Uncompressed data\n":null,"controller":"welcome","action":"create"}%
あなたがミドルウェア直前Rack::Head
config.middleware.insert_before Rack::Head, "CompressedRequests"
これは、次のコマンドを使用して、アプリケーションのミドルウェア・スタックを確認することができますトリック
を行う必要がありますを挿入した場合、これは動作するはず
rake middleware
あなたの応答はほとんど@itsnikolayと同じですが、彼はもう少し説明とテストをしたので、あなたの代わりに彼を受け入れました。しかし、とにかく感謝:) –
私はそれを最初に追加! hahaが問題を解決してくれば問題はありません:) –
あなたroutes.rbをファイルの場合:あなたのapi_controller.rbで
post 'my_endpoint', to: 'api#my_endpoint'
:
class ApiController < ActionController::Base
def my_endpoint
render json: JSON.parse(ActiveSupport::Gzip.decompress(request.body.string))
end
end
私は足のクライアントを使用して新しいRailsの5アプリでこれをテストしてみた:あなたはユニコーンの前にnginxのを持っている場合は、あなただけのデータを解凍するためにnginxのを伝えることができ
は実際には良い解決策ではありません。なぜなら、それは特定のアクションごとであり、毎回手動で圧縮解除を行うからです。 –
@DiegoPlentzこれを再利用したい場合は、重要なビット( 'JSON.parse(ActiveSupport :: Gzip.decompress(request.body.string))')を保持する 'decompressed_body'メソッドを持つことができます。 このメソッドは、APIベースコントローラまたはコントローラーの関心事に含まれているため、再利用してコードをDRYにすることができます。 – rebagliatte
- 1. AndroidアプリケーションでBluetooth受信ファイルを受け入れる方法は?
- 2. .NETでCMISリクエストを受け入れる方法は?
- 3. Rails - コントローラでajaxを受け入れる方法
- 4. Railsコントローラで多くのリクエストを受け入れる正しい方法は何ですか?
- 5. Rails - JSONオブジェクトの配列を受け入れる方法
- 6. Spring MVCコントローラへのGETリクエストで日付パラメータを受け入れる方法は?
- 7. aspクラシックのリクエスト受け入れ制限を増やす方法
- 8. 許可されたアプリケーションからのリクエストの受け入れ
- 9. captchaで保護されたWebアプリケーション機能を受け入れる方法は?
- 10. JavaアプリケーションがWS-Security証明書を受け入れる方法
- 11. ember.js:ajaxリクエストによる受け入れテスト
- 12. Windows入力シミュレータで変数を受け入れる方法は?
- 13. WinFormsアプリケーションでキーストロークを受け入れる方法はありますか?
- 14. C#webアプリケーションへの受信投稿を受け入れる方法
- 15. Rails - すでに処理されているリクエストを破棄せずにリクエストを受け入れることを「正しい」方法とは何ですか?
- 16. 私のRails RESTful WebサービスでPUTメソッドとDELETEメソッドを受け入れる方法
- 17. rails APIでhttpの代わりにjson paramsを受け入れる方法
- 18. リクエストを受け取るアプリケーションC#
- 19. Rails 3を作成する方法リソースアクションを受け入れるPOST
- 20. Rails 5でアプリケーション設定を定義する方法は?
- 21. 「入力」値を受け入れる方法は?
- 22. Ruby On RailsでのReactJsによる投稿リクエストの受け取り方法?
- 23. JMockitでメソッド呼び出しを受け入れる方法は?
- 24. 受け入れテストでember-simple-authをカバーする方法は?
- 25. appiumでこのアラートを受け入れる方法は?
- 26. ページ/ウィジェットのタイトルでHTMLを受け入れる方法は? (wordpress)
- 27. WCF DataServiceでJSONを受け入れる方法は?
- 28. デフォルトでパッチ選択を受け入れる方法は?
- 29. Pythonクラスのコンストラクタでパラメータを受け入れる方法は?
- 30. 別のオブジェクトの__init__ステートメントでオブジェクトを受け入れる方法は?
それは動作しないためにnDispatch :: Cookies'?それはそれの後のミドルウェアであり、それはまだ存在します。 –
nginxを使用してソリューションを実装して、https://www.nginx.com/resources/admin-guide/compression-and-decompression/の圧縮解除を行うことができます。このようにして、railsはそれを処理してコンテンツを取得する必要はありません右。 –
賞金に感謝します。私はそれがあなたに助けてうれしい! – itsnikolay