2011-09-22 4 views
11

Quando si eseguono le attività: attività di rake precompilata, vengono create versioni compresse di app delle proprie app. Secondo la guida di Rails per la pipeline degli asset, è possibile configurare il proprio server web (nel mio caso Apache 2.2) per servire questi file precompressi invece di fare il lavoro sul server web.Come configurare mod_deflate per pubblicare asset gzip preparati con risorse: precompilato

Quello che non riesco a capire è come ottenere mod_deflate configurato in modo che questi file siano serviti invece di essere compressi in due e quindi serviti?

ho mod_deflate attivato tramite 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 

E ho convertito il codice sulle guide di andare in .htaccess nella/beni pubblici:

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

Qualsiasi idee su come impostare correttamente?

risposta

24

Innanzitutto, non si desidera che mod_deflate funzioni qui. Quindi, nel file .htaccess aggiunto:

SetEnv no-gzip 

Questo dovrebbe disattivare mod_deflate per le risorse.

In secondo luogo, odio non essere d'accordo con la gente di rotaie, ma penso che ci siano un paio di carenze nella loro risorsa .htaccess ricetta. La parte superiore va bene, ma per RewriteEngine e al di là avrei:

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

piccolo commento - se questo non è in .htaccess, ha bisogno di essere nella sezione Directory, altrimenti -s non funziona. – lzap

+3

Inoltre, probabilmente dovresti raccomandare l'uso di 'application/javascript' invece di' text/javascript'. Vedi [RFC4329] (https://tools.ietf.org/html/rfc4329) in * Tipi di media di scripting *. – tne

+0

dovevo fare \t AddEncoding gzip .gz altrimenti buono – Torsten

Problemi correlati