Включение кэширования страниц rails приводит к исчезновению кодировки заголовка http
Мне нужно, чтобы charset был utf-8, который, по-видимому, имеет место по умолчанию. Недавно я включил кэширование страниц для нескольких статических страниц:
caches_page :about
Кэширование работает нормально, и я вижу соответствующие страницы about.html и contact.html, сгенерированные в моей / публичной папке, кроме случаев, когда страница отображается, ее больше нет в utf-8.
Немного погуглив, я попытался просмотреть заголовки http с помощью wget, до и после кэширования:
первый раз:
$wget --server-response http://localhost:3000/about
HTTP request sent, awaiting response...
1 HTTP/1.1 200 OK
2 X-Ua-Compatible: IE=Edge
3 Etag: "f7b0b4dea015140f3b5ad90c3a392bef"
4 Connection: Keep-Alive
5 Content-Type: text/html; charset=utf-8
6 Date: Sun, 12 Jun 2011 03:44:22 GMT
7 Server: WEBrick/1.3.1 (Ruby/1.8.7/2009-06-12)
8 X-Runtime: 0.235347
9 Content-Length: 5520
10 Cache-Control: max-age=0, private, must-revalidate
кэшировать:
$wget --server-response http://localhost:3000/about
Resolving localhost... 127.0.0.1
Connecting to localhost[127.0.0.1]:3000... connected.
HTTP request sent, awaiting response...
1 HTTP/1.1 200 OK
2 Last-Modified: Sun, 12 Jun 2011 03:34:42 GMT
3 Connection: Keep-Alive
4 Content-Type: text/html
5 Date: Sun, 12 Jun 2011 03:39:53 GMT
6 Server: WEBrick/1.3.1 (Ruby/1.8.7/2009-06-12)
7 Content-Length: 5783
в результате страница отображается в ISO-8859-1, и я получаю кучу искаженного текста. Кто-нибудь знает, как я могу предотвратить этот нежелательный результат? Спасибо.
1 ответ
Решение будет зависеть от используемого сервера.
Когда вы используете кеш страниц, серверы читает сервер напрямую, поэтому стек рельсов не предоставляет информацию о кодировке серверу. Тогда сервер по умолчанию применяется.
Если вы используете apache для пассажиров, добавьте в конфигурацию:
AddDefaultCharset UTF-8
Если вам нужны конкретные кодировки, используйте решение, подобное приведенному в http://www.philsergi.com/2007/06/rails-page-caching-and-mime-types.html
<LocationMatch \/(rss)\/?>
ForceType text/xml;charset=utf-8
</LocationMatch>
<LocationMatch \/(ical)\/?>
ForceType text/calendar;charset=utf-8
</LocationMatch>