Sprockets、Rack::Deflater
Sinatra 、そしてuse Rack::Deflater
.
私はこれに変更しconfig.ru
ました:
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public"
use Rack::Deflater
run lambda # ...same as in the question
そして、応答が gzip で送信されたことを確認できました。
$ curl -H 'Accept-Encoding: gzip' http://localhost:9292 | file -
/dev/stdin: gzip compressed data
ただし/css
、 、/js
、またはの静的アセットは対象外/images
:
$ curl -H 'Accept-Encoding: gzip' http://localhost:9292/css/bootstrap.min.css | file -
/dev/stdin: ASCII English text, with very long lines
そして、これが標準のミドルウェア スタックであることに気付きました。Rack::Staticは静的ファイルへの呼び出しをインターセプトし、次のスタックをスキップします。それpublic/index.html
が、資産ではなく機能した理由です。
以下が機能しました(現在は の前にconfig.ru
あることに注意してください):use Rack::Deflater
use Rack::Static
use Rack::Deflater
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public"
run lambda { |env|
[
200,
{
'Content-Type' => 'text/html',
'Cache-Control' => 'public, max-age=86400'
},
File.open('public/index.html', File::RDONLY)
]
}
検証済み:
$ curl -H 'Accept-Encoding: gzip' http://localhost:9292/css/bootstrap.min.css | file -
/dev/stdin: gzip compressed data, from Unix