2011-09-22 12 views
11

アセット:プリコンパイルのレーキタスクを実行すると、アプリケーションのアセットのgzippedバージョンが作成されます。アセットパイプライン用のRailsガイドによれば、Webサーバー(私の場合はApache 2.2)を設定して、Webサーバーに作業を行わせる代わりに、これらの事前圧縮ファイルを提供することができます。アセットで準備されたgzippedアセットを処理するためのmod_deflateの設定方法:プリコンパイル

私が理解できないのは、mod_deflateがダブル圧縮されて提供される代わりに提供されるように設定する方法です。

私はhttpd.confの経由有効mod_deflateを持っている:

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript 
BrowserMatch ^Mozilla/4 gzip-only-text/html 
BrowserMatch ^Mozilla/4\.0[678] no-gzip 
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 

をそして私は、レール上のコードを変換してきた公共/資産での.htaccessに行くために導く:

# Some browsers still send conditional-GET requests if there's a 
# Last-Modified header or an ETag header even if they haven't 
# reached the expiry date sent in the Expires header. 

Header unset Last-Modified 
Header unset ETag 
FileETag None 

# RFC says only cache for 1 year 

ExpiresActive On 
ExpiresDefault "access plus 1 year" 

# Serve gzipped versions instead of requiring Apache to do the work 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}.gz -s 
RewriteRule ^(.+) $1.gz [L] 

# without it, Content-Type will be "application/x-gzip" 

<FilesMatch .*\.css.gz> 
    ForceType text/css 
</FilesMatch> 

<FilesMatch .*\.js.gz> 
    ForceType text/javascript 
</FilesMatch> 

どれでもどのようにこれを正しく設定するためのアイデア?

答えて

24

まず、ここでmod_deflateを動作させたくありません。だからあなたの資産.htaccessファイルの追加に:

SetEnv no-gzip 

これはあなたの資産のmod_deflateををオフにする必要があります。

第二に、私はレールの人々に同意しないことを嫌っていますが、私は彼らの資産.htaccessのレシピにいくつかの不足があると思います。上部には、罰金が、RewriteEngineのために、私が持っていると思いを超えて:

RewriteEngine on 
# Make sure the browser supports gzip encoding before we send it 
RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b 
RewriteCond %{REQUEST_URI} .*\.(css|js) 
RewriteCond %{REQUEST_FILENAME}.gz -s 
RewriteRule ^(.+) $1.gz [L] 

# without it, Content-Type will be "application/x-gzip" 
# also add a content-encoding header to tell the browser to decompress 

<FilesMatch \.css\.gz$> 
    ForceType text/css 
    Header set Content-Encoding gzip 
</FilesMatch> 

<FilesMatch \.js\.gz$> 
    ForceType application/javascript 
    Header set Content-Encoding gzip 
</FilesMatch> 
+1

小型コメント - これは.htaccessファイルにない場合、それはそう-sは動作しません、ディレクトリセクションにする必要があります。 – lzap

+3

また、 'text/javascript'の代わりに' application/javascript'を使うことをお勧めします。 * Scripting Media Types *については、[RFC4329](https://tools.ietf.org/html/rfc4329)を参照してください。 – tne

+0

私は \t AddEncoding gzip .gz としていました。 – Torsten