«Кэш прогрева» при развертывании - PullRequest
17 голосов
/ 13 февраля 2009

Мне интересно, есть ли у кого-нибудь какие-либо плагины или рецепты capistrano, которые будут «предварительно нагревать» кэш страницы для приложения rails, создавая весь html-файл, кэшированный на странице, во время развертывания или локально до того, как произойдет развертывание.

У меня есть несколько в основном статических сайтов, которые мало меняются и будут работать быстрее, если HTML уже написан, вместо того, чтобы один посетитель заходил на сайт.

Вместо того, чтобы создать это самому (кажется легким, но низким приоритетом), оно уже существует?

Ответы [ 4 ]

18 голосов
/ 13 февраля 2009

Вы можете использовать wget или другую программу для паука сайта. Фактически, этот вид сценария упоминается как одно из применений на его странице руководства:

Эта опция говорит Wget удалить все файлы, которые он загружает, после этого. Это полезно для предварительной выборки популярных страниц через прокси, например ::10000

   wget -r -nd --delete-after http://whatever.com/~popular/page/

Параметр -r предназначен для рекурсивного извлечения, а -nd - не создавать каталоги.

4 голосов
/ 03 июня 2009

Я использую задачу rake, которая выглядит так, чтобы обновлять каждую страницу кэшированной карты сайта каждую ночь:

 require 'action_controller/integration'
 ActionController::Base::expire_page("/sitemap.xml")   
 app = ActionController::Integration::Session.new
 app.host = "notexample.com"
 app.get("/sitemap.xml")

См. http://gist.github.com/122738

2 голосов
/ 21 апреля 2009

Предварительная загрузка таким способом - как правило, с заданием cron, которое начинается в 22:00 по тихоокеанскому времени и заканчивается в 6:00 по восточному времени - это хороший способ сбалансировать нагрузку на ваш сайт.

Проверьте плагин spider_test rails для простого способа сделать это в тестировании.

Если вы собираетесь использовать wget выше, добавьте опции --level =, --no-parent, --wait = SECONDS и --waitretry = SECONDS, чтобы уменьшить нагрузку, и вы также можете войти и запишите ответы заголовков для диагностики или анализа (при желании измените путь с / tmp):

wget -r --level=5 --no-parent --delete-after \
  --wait=2 --waitretry=10  \
  --server-response        \
  --append-output=/tmp/spidering-`date "+%Y%m%d"`.log
  'http://whatever.com/~popular/page/'
1 голос
/ 13 февраля 2009

Я установил интеграционные тесты, которые подтверждают, что доступны все основные разделы сайта (всего несколько сотен страниц). Они не делают ничего, что изменяет данные - просто вытягивают страницы и формы.

В настоящее время я не запускаю их при развертывании своего производственного экземпляра, но теперь вы упомянули об этом - это может быть хорошей идеей.

Другой альтернативой может быть перетягивание каждой страницы, которая появляется в вашей карте сайта (если она у вас есть, что вам, вероятно, следует). Должно быть действительно легко написать скрипт gem / rake, который делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...