Я не рекомендую это, но если вы действительно хотите сжимать ответ JSON вручную, вот как вы это сделаете:
class CompressedController < ApplicationController
def test
respond_to do |f|
f.json do
file = Tempfile.new
json = JSON.generate(hello: 'World')
Zlib::GzipWriter.open(file.path) { |gz| gz.write json }
response.set_header('Content-Encoding', 'gzip')
send_data file.read, type: :json, disposition: 'inline'
end
end
end
end
Это просто самостоятельный минимальный пример. Адаптируйте его к своему фактическому варианту использования.
Если вы действительно хотите решить проблемы с производительностью в здравом уме, используйте сжатие на уровне веб-сервера вместе с кэшированием .