«Разминочный кэш» при развертывании
-
23-08-2019 - |
Вопрос
Мне интересно, есть ли у кого-нибудь какие-либо плагины или рецепты 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")
Предварительная загрузка таким способом — обычно задание 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/'