Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Я использую задачу 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

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

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

Если вы собираетесь использовать 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/'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top