2011-09-22 11 views
11

Podczas uruchamiania zasobów: prekompiluj zadanie rake, tworzone są skompresowane wersje zasobów aplikacji. Zgodnie z wytycznymi Rails dla potoku aktywów, możesz skonfigurować swój serwer WWW (w moim przypadku Apache 2.2), aby obsługiwał te prekompresowane pliki, zamiast mieć serwer WWW do wykonania pracy.Jak skonfigurować moduł mod_deflate do obsługi zasobów gzipped przygotowanych przy użyciu zasobów: prekompilacja

Czego nie mogę zrozumieć, to jak skonfigurować mod_deflate tak, aby te pliki były wyświetlane zamiast podwójnego kompresji, a następnie wyświetlane?

mam mod_deflate włączona poprzez httpd.conf:

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 

A ja konwertowane kod na szynach prowadzących, aby przejść do .htaccess w miejscach publicznych/aktywa:

# 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> 

Any pomysły, jak to właściwie ustawić?

Odpowiedz

24

Po pierwsze, nie chcesz, aby mod_deflate działało tutaj. W pliku asset.htaccess dodaj:

SetEnv no-gzip 

Powinno to wyłączyć mod_deflate dla Twoich aktywów.

Po drugie, nie znoszę się nie zgadzać z ludźmi z toru, ale myślę, że istnieje kilka niedociągnięć w ich zasobach .htaccess przepis. Górna część jest w porządku, ale dla RewriteEngine i poza Musiałbym:

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

Mała uwaga - jeśli nie jest to w .htaccess, to musi być w sekcji Directory, -s inaczej nie zadziała. – lzap

+3

Powinieneś także polecić użycie 'application/javascript' zamiast' text/javascript'. Zobacz [RFC4329] (https://tools.ietf.org/html/rfc4329) na * Typy mediów Scripting *. – tne

+0

musiałem zrobić \t AddEncoding gzip .gz inaczej dobry – Torsten

Powiązane problemy