Heroku & Rails - не работает Varnish HTTP Cache - PullRequest
1 голос
/ 29 декабря 2011

Корневая страница моего сайта heroku по сути статична, в представлении присутствует некоторый рубиновый код, но нет ничего конкретного для отдельного пользователя, поэтому я бы хотел, чтобы Varnish кэшировал его и обслуживал, не затрагивая мой dyno (обратите внимание, что в приложении есть другие динамические страницы).

В Heroku все выглядит очень просто здесь . Просто добавьте response.headers['Cache-Control'] = 'public, max-age=300', и он будет кешироваться в течение 5 минут, прежде чем будет восстановлен.

Чтобы проверить это, я внес изменения и вывел дату (Time.now) на страницу, чтобы посмотреть, будет ли она оставаться неизменной в течение 5 минут, но каждый раз, когда я получаю доступ к странице в новом браузере, она обновляется. Обновление в том же браузере работает нормально, но я думаю, что это связано с кэшированием браузера, а не с Heroku.

Если это поможет, когда я делаю curl -i, чтобы получить заголовки HTTP, я получаю это:

HTTP/1.1 200 OK^M
Server: nginx/0.7.67^M
Date: Thu, 29 Dec 2011 02:03:33 GMT^M
Content-Type: text/html; charset=utf-8^M
Connection: keep-alive^M
Cache-Control: public, max-age=300^M
X-Ua-Compatible: IE=Edge^M
Etag: "8a1b58f048968803980417a2914764d0"^M
X-Runtime: 0.038393^M
Content-Length: 8310^M
X-Varnish: 1040651825^M
Age: 0^M
Via: 1.1 varnish^M

По сути, я хотел бы убедиться, что он генерируется один раз, а затем кешируется в Varnish. Я пропускаю какие-либо параметры, нужно ли настраивать что-то еще? Если у вас есть другие предложения по размещению быстрой статической страницы, я бы тоже их полюбил.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 03 января 2012

Я полагаю, что в вашем приложении что-то вызывало эту проблему (возможно, заголовки установлены неправильно?).

Чтобы проверить это, я создал приложение, содержащее одну кэшированную и одну некэшированную страницу (не что иное, как рендеринг текста на вывод.

http://morning -earth-1972.heroku.com / база / кэш

http://morning -earth-1972.heroku.com / база / no_cache

Обратите внимание, что версия кэша не изменится в течение пяти минут после печати. ​​

Источник можно найти здесь: https://github.com/neilmiddleton/heroku_varnish_test_SO_8663326

Поэтому Героку работает так, как вы ожидаете. Сначала я бы посмотрел на вашу систему аутентификации, чтобы убедиться, что она ничего не делает, поскольку это довольно распространенный сценарий (чтобы обеспечить полную защиту кэшированных страниц)

1 голос
/ 29 декабря 2011

Может быть, вы отправляете куки при тестировании в вашем браузере?Каковы ваши заголовки запроса?

Что вы получите, если ваш прогон curl -I http://host.com/ дважды?

0 голосов
/ 05 января 2012

Проблема оказалась в том, что в Heroku есть несколько серверов Varnish, поэтому требуется примерно 10-15 обновлений страниц, пока страница не будет кэширована на всех серверах, после чего она останется в кэше. Это работало все время, я просто сдался после того, как несколько обновлений не работали.

Я также увеличил max_age, чтобы я мог видеть его более четко, 5-минутный кеш почти не действует.

...