fix: пререндер-шаблоны работали некорректно в prod

This commit is contained in:
2026-05-19 22:45:56 +03:00
parent 9575e0e0d9
commit cb9dab9e56
10 changed files with 785 additions and 95 deletions

View File

@@ -394,40 +394,72 @@ location = /sitemap.xml {
## 4) Команда `regenerate_seria_prerender`
Назначение:
- пересобрать pre-render шаблоны для страниц серий (`catalog_seria_info`) в каталоге `seria_info/prepared/`.
- пересобрать pre-render шаблоны для **статических данных** страниц серий (`catalog_seria_info`) в каталоге `seria_info/prepared/`.
- генерирует **3 типа файлов** для каждой серии (верхняя статья НЕ кешируется, она рендерится динамически из БД):
- `{seria_id}_id_static_flaps.html` — схемы открывания
- `{seria_id}_id_static_graph.html` — график ввода в эксплуатацию
- `{seria_id}_id_static_map_stats.html` — карта + статистика
Проверка без записи файлов:
### Контекст: двухуровневое кеширование
Система использует двухуровневое кеширование:
- **Статический кеш** — дорогостоящие операции (геокоординаты, графики, схемы). Генерируются один раз и сохраняются на диск.
- **Динамические данные** — верхняя статья про серию (может редактироваться через админку, видно БЕЗ перезагрузки контейнера) и таблица оконных проёмов (показывает актуальные предложения).
Подробнее: см. [`CACHE_PRERENDER_SYSTEM.md`](CACHE_PRERENDER_SYSTEM.md)
### Проверка без записи файлов (dry-run):
```bash
cd /Users/e-serg/PRJ/2022-oknardia
poetry run python oknardia/manage.py regenerate_seria_prerender --dry-run
```
Пересборка только отсутствующих файлов:
Пересборка только отсутствующих файлов (стандартный запуск):
```bash
cd /Users/e-serg/PRJ/2022-oknardia
poetry run python oknardia/manage.py regenerate_seria_prerender
```
Принудительная пересборка всех root-серий:
Вывод:
```
OK seria 210: 3 кеш-файла созданы
OK seria 100: 3 кеш-файла созданы
...
Готово. Обработано: 31. Создано/пересоздано: 31 × 3 файла. Пропущено: 0.
```
Принудительная пересборка всех root-серий (даже если кеш существует):
```bash
cd /Users/e-serg/PRJ/2022-oknardia
poetry run python oknardia/manage.py regenerate_seria_prerender --force
```
Выборочная пересборка:
Выборочная пересборка (конкретные серии):
```bash
cd /Users/e-serg/PRJ/2022-oknardia
poetry run python oknardia/manage.py regenerate_seria_prerender --seria-id 843 --seria-id 2100 --force
```
Когда запускать:
- после обновления логики `catalog_seria_info`;
- после массового обновления данных серий/окон/квартир;
- после очистки `seria_info/prepared/`.
### Когда запускать
- **После первого развертывания** — сгенерировать кеш всех 31 серии один раз.
- **После обновления логики `catalog_seria_info`** — изменились параметры графика или карты.
- **После изменения координат зданий** — geo-данные обновлены.
- **После добавления новых зданий в серию** — карта и список зда<D0B4><D0B0>ий изменились.
- **По расписанию** (опционально, если данные по геокоординатам обновляются):
```bash
0 3 * * 0 cd /Users/e-serg/PRJ/2022-oknardia && poetry run python oknardia/manage.py regenerate_seria_prerender >> /var/log/oknardia-prerender.log 2>&1
```
### Когда НЕ нужна регенерация
- **При добавлении новых предложений/цен** — таблица окон обновляется при каждом запросе автоматически.
- **При редактировании верхней статьи через админку** — она рендерится динамически, кешируется НЕ нужно.
- **При изменении наличия/статуса профилей** — рейтинги пересчитываются запросом через `make_rating`.
## 5) Команда `populate_seo_fields`
@@ -532,14 +564,14 @@ print(f'Пусто sMetaKeywords: {posts.filter(sMetaKeywords=\"\").count()}')
✓ Записей обновлено в БД: 28
✗ Ошибок при обработке: 0
Обновлено 28 записей успешно!
Обновлено 28 записей успешно!
```
### Откат и безопасность
- **Безопасна для повторного запуска** — пустые поля не изменяются при повторной работе.
- **Откат через SQL** — если нужно очистить, используй: `UPDATE oknardia_blogposts SET sSlug='', sMetaDescription='', sMetaKeywords='';`
- **Всегда используй `--dry-run`** перед первым запуском для проверки.
- **Безопасна для повторного запуска** — пустые поля не изменяются при повторной работе.
- **Откат через SQL** — если нужно очистить, используй: `UPDATE oknardia_blogposts SET sSlug='', sMetaDescription='', sMetaKeywords='';`
- **Всегда используй `--dry-run`** перед первым запуском для проверки.
## 6) Команда `make_rating`