W przeszłości używałem this solution, ale od Rails 5 deprecatedParamsParser
oprogramowanie pośrednie już nie działa.Jak akceptować żądania gzipped w aplikacji rails 5?
Odpowiedz
Wystarczy dodaj:
# 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
Można przetestować go z:
# config/routes.rb
post '/', to: 'welcome#create'
# app/controllers/welcome_controller.rb
class WelcomeController < ActionController::Base
def create
render json: params
end
end
A czy wniosek:
curl --data-binary @<(echo "Uncompressed data" | gzip) \
-H "CONTENT_ENCODING: gzip" \
localhost:3000
{"Uncompressed data\n":null,"controller":"welcome","action":"create"}%
to powinno działać po włożeniu middleware tuż przed Rack::Head
config.middleware.insert_before Rack::Head, "CompressedRequests"
to powinno załatwić sprawę
można sprawdzić w aplikacji middleware stos za pomocą następującego polecenia
rake middleware
twoja odpowiedź jest prawie taka sama jak @itsnikolay, tylko zaakceptowałem jego zamiast twojego, ponieważ on położył trochę więcej wyjaśnień i testów. Ale dzięki i tak :) –
i dodałem go pierwszy! haha, ale nie ma znaczenia tak długo, jak rozwiązał problem ur :) –
W pliku routes.rb:
post 'my_endpoint', to: 'api#my_endpoint'
Na api_controller.rb:
class ApiController < ActionController::Base
def my_endpoint
render json: JSON.parse(ActiveSupport::Gzip.decompress(request.body.string))
end
end
Przetestowałem to na zupełnie nowy Szyny 5 app przy użyciu klienta Paw:
nie jest tak naprawdę dobrym rozwiązaniem, ponieważ jest specyficzne dla każdego działania i za każdym razem wykonujesz dekompresję ręcznie. –
@DiegoPlentz, jeśli chcesz go ponownie użyć, możesz mieć metodę 'decompressed_body' trzymającą ważne bity (' JSON.parse (ActiveSupport :: Gzip.decompress (request.body.string)) '). Ta metoda może być używana w kontrolerze bazowym API lub w kontrolerze umożliwiającym ponowne użycie i utrzymanie kodu w stanie SUCHYM. – rebagliatte
Jeśli masz Nginx przed jednorożce, to można po prostu powiedzieć Nginx do dekompresji danych dla ciebie
http://www.pataliebre.net/howto-make-nginx-decompress-a-gzipped-request.html#.WBzSt-ErIUE
https://www.nginx.com/resources/admin-guide/compression-and-decompression/
to nie działa. tylko dekompresuje odpowiedzi, a nie żądania. –
Witam @DiegoPlentz, proszę sprawdź moją zaktualizowaną odpowiedź – Tilo
to lepiej :) –
- 1. Rails 4.2 Aplikacja nie obsługuje zasobów Gzipped
- 2. Jak uzyskać current_user w aplikacji ActionCable rails-5-api?
- 3. Jak akceptować testową funkcjonalność aplikacji captcha-protected?
- 4. Jak skonfigurować usługi IIS, aby akceptować żądania POST?
- 5. Argument require_tree musi być katalogiem w ulepszonej aplikacji Rails 5
- 6. PHP open gzipped XML
- 7. Rails 5 SQL Injection
- 8. skip_before_action i Rails 5
- 9. W IIS7 pliki gzipped nie pozostają w ten sposób
- 10. Czy Tomcat może akceptować żądania HTTP 1.1 bez nagłówka hosta?
- 11. Jak wyświetlać zasoby gzipped od Amazon S3
- 12. Jak zmienić jasność w aplikacji iOS 5?
- 13. Jak spodziewać się skrótu Params w RSpec w Rails 5?
- 14. Jak rozpocząć testowanie aplikacji Rails?
- 15. Jak używać Less w aplikacji Rails 3.1?
- 16. Jak mogę zaimplementować modularyzację w aplikacji Rails?
- 17. Rails/rspec: jak ustawić pliki cookie w specyfikacji żądania?
- 18. Rails 3 middleware modyfikować nagłówki żądania
- 19. Modelowanie nazw w aplikacji Rails
- 20. Jak wyświetlić animowaną ikonę podczas przetwarzania żądania Ajax - Rails 3
- 21. Jak utworzyć routing dla aplikacji Rails w całej aplikacji?
- 22. ruby rails - przekierowanie na oryginalny URL żądania
- 23. Co oznacza [5.0] w ActiveRecord :: Migration Rails 5?
- 24. Jak śledzić żądania MongoDB z aplikacji konsolowej?
- 25. Scalanie dwóch aplikacji rails
- 26. Jak rozróżnić połączenia Rails API w Newrelic?
- 27. Rails 3.1 zdalne żądania przesyłanie dwa razy
- 28. Jak utworzyć interfejs API REST dla istniejącej aplikacji Ruby on Rails 5?
- 29. Limit żądania aplikacji Facebook osiągnął
- 30. Jak zmienić nazwę aplikacji Rail 5?
czy to działa, jeśli włożysz je przed 'actio nDispatch :: Cookies'? Które jest oprogramowaniem pośredniczącym i nadal istnieje. –
możesz zaimplementować rozwiązanie za pomocą nginx, aby przeprowadzić dekompresję https://www.nginx.com/resources/admin-guide/compression-and-decompression/ w ten sposób rails nie musi sobie z tym poradzić i uzyskać zawartość dobrze. –
Wielkie dzięki za bounty. Cieszę się, że ci pomogło! – itsnikolay