2011-09-22 10 views
11

Al ejecutar los activos: tareas de rastrillo previas a la compilación, se crean versiones gzip de los activos de su aplicación. De acuerdo con la guía Rails para el inventario de activos, puede configurar su servidor web (en mi caso, Apache 2.2) para que sirva estos archivos precomprimidos en lugar de hacer que el servidor web haga el trabajo.Cómo configurar mod_deflate para servir activos comprimidos preparados con activos: precompilación

Lo que no puedo entender es cómo configurar mod_deflate configurado para que estos archivos se sirvan en lugar de ser doblemente comprimidos y luego servidos?

tengo mod_deflate habilitado a través 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 

Y he convierte el código en los carriles de guía para entrar en el .htaccess en público/activos:

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

Cualquier ideas de cómo configurar esto correctamente?

Respuesta

24

En primer lugar, no desea que mod_deflate funcione aquí. Así que en el archivo .htaccess sus activos complemento:

SetEnv no-gzip 

Esto se debe apagar mod_deflate para sus activos.

En segundo lugar, odio no estar de acuerdo con la gente de los rieles, pero creo que hay un par de deficiencias en sus recursos .htaccess receta. La parte superior está bien, pero para RewriteEngine y más allá Tendría:

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

Pequeño comentario - si esto no es en .htaccess, que tiene que ser en la sección Directorio, de lo contrario no funcionará -s. – lzap

+3

Además, probablemente debería recomendar el uso de 'application/javascript' en lugar de' text/javascript'. Consulte [RFC4329] (https://tools.ietf.org/html/rfc4329) en * Tipos de medios de secuencias de comandos *. – tne

+0

que tenía que hacer gzip \t AddEncoding .gz lo contrario buenas – Torsten

Cuestiones relacionadas