Я выполнил шаги, описанные в блоге Asset Pipeline: от разработки к производству и приспособил их к моей среде. Два важных файла:
/etc/apache/site-available/example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "/var/www/sites/example.com/current/public"
ErrorLog "/var/log/apache2/example.com-error_log"
CustomLog "/var/log/apache2/example.com-access_log" common
<Directory "/var/www/sites/example.com/current/public">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/sites/example.com/current/public/assets">
AllowOverride All
</Directory>
<LocationMatch "^/assets/.*$">
Header unset Last-Modified
Header unset ETag
FileETag none
ExpiresActive On
ExpiresDefault "access plus 1 year"
</LocationMatch>
RewriteEngine On
# Remove the www
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
</VirtualHost>
/var/www/sites/example.com/shared/assets/.htaccess
RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
<FilesMatch \.css\.gz$>
ForceType text/css
Header set Content-Encoding gzip
</FilesMatch>
<FilesMatch \.js\.gz$>
ForceType text/javascript
Header set Content-Encoding gzip
</FilesMatch>
Но похоже, что apache отправляет пустые файлы gzip, потому что тестовый сайт теряет все стили, а firebug не находит никакого содержимого для файлов css. Хотя, если я вызываю путь к ресурсам напрямую, я получаю какую-то тарабарщину, похожую на двоичные данные. Если я перенесу файл htaccess, все вернется в норму. Как я могу узнать, где / что пошло не так, или у вас есть предложения, какую ошибку я сделал?
> apache2 -v
System: Server version: Apache/2.2.14 (Ubuntu)
Server built: Mar 5 2012 16:42:17
> uname -a
Linux node0 2.6.18-028stab094.3 #1 SMP Thu Sep 22 12:47:37 MSD 2011 x86_64 GNU/Linux
Измените кодировку:
<IfModule mod_mime.c>
AddEncoding gzip .gz
</IfModule>
Пожалуйста, проверьте эта запись в блоге для более подробного объяснения.