От моего previous experience с цепями, синатрой и Rack::Deflater
, я был уверен, что был просто еще одним номером use Rack::Deflater
вдали от того, что я хотел.
Я изменил config.ru
к этому:
use Rack::Static,
:urls => ["/images", "/js", "/css"],
:root => "public"
use Rack::Deflater
run lambda # ...same as in the question
, и я был в состоянии проверить, что ответы были направлены архивированная:
$ 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 intercepts вызов статических файлов и, таким образом, пропускает следующий стек! Вот почему он работал для 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