Files
admin/.wiki/concepts/pilonuxt-restart-vs-redeploy-2026-08-16.md

67 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "pilonuxt: рестарт vs пересборка (in-memory viewModel кэш content-api)"
type: concept
tags: [pilonuxt, deploy, ops, cache, content-api, portainer]
sources: []
related: [concepts/admin-api-embed-pilonuxt.md, concepts/namespace-consolidation-snolla.md]
updated: 2026-08-16
---
# pilonuxt (стек 16): рестарт vs пересборка
Инцидент 2026-08-16 зафиксировал две разные операции на стеке 16 (pilonuxt), которые
нельзя путать:
| Операция | Когда нужна | Как делается | Что сбрасывает |
|---|---|---|---|
| **Рестарт контейнера** | Контент/цены в БД изменились, код тот же | Portainer: `POST /api/endpoints/1/docker/containers/pilonuxt/restart` (скрипт `.tmp/restart-stack16.ps1`) | **In-memory viewModel кэш content-api** — свежие данные из MoreThenCms подтягиваются без пересборки |
| **Пересборка (deploy)** | Изменился код (монорепа, новый git-sha) | build (secret `verdaccio_token`) → push → Portainer PUT стек 16 (`.tmp/redeploy-stack16.ps1 -OldTag X -NewTag Y`) | Код + всё вышеперечисленное |
## Симптом «данные в БД есть, на фронте нет» → рестарт
2026-08-16: после перезаливки `volume_price` (loader `38c26c7` + admin-api 0.11.0) часть
карточек не показывала «Цена за м³» — в MoreThenCms поле было (`voulme_price: 38000`,
массив, DateUpdated свежий), а Nuxt-data отдавала `volume_price: null`. Диагноз прогера
(подтверждён): **content-api держит viewModel в памяти контейнера** — рестарт сбрасывает,
пересборка не нужна. После рестарта цена появилась, категории целы.
**Правило:** при расхождении «БД свежая ↔ фронт старый» первым шагом рестарт, не деплой.
Деплой только когда реально изменился код (новый sha в монорепе).
## Анти-симптом: 500 на странице — рестарт НЕ поможет
Рестарт бесполезен при серверном краше view model. 2026-08-16: 10 новых товаров →
`/catalog/skandinavskaya-doska` + `/catalog/imitaciya-brusa` отдавали HTTP 200 с 500 внутри
(NuxtError, `Request failed with status code 500`). Логи:
```
TypeError: Cannot read properties of undefined (reading 'name')
at @snolla/core viewModels/index.js:419 (_.find(x => x.name))
```
Root cause: admin-api при create писал `Products.Content` плоским объектом, core читал
только массив `[{name,value}]`. Фикс — на стороне snolla (core 0.26.7 normalize + admin-api
0.11.0 array-canon), потребовал пересборки (`1128ddc``64c2539`), рестарт не помог бы.
**Правило:** 500 в логах со стеком `@snolla/core`/lodash `_.find` — это код/данные, не кэш.
Рестарт не лечит; искать фикс в монорепе/у snolla, пересобирать.
## Порядок диагностики (итерации 09:05Z → 14:40Z)
1. Новинки не видны + цены нет → прогер просит рестарт (кэш). Рестарт → цены появились ✅
(но 500 на категориях остался — это другой класс).
2. 500 на категориях новинок → логи показали краш core → root cause у snolla (Content
object vs array) → фикс core 0.26.7 → пересборка `1128ddc` → 6+6 товаров 200 ✅.
3. Затем array-canon канонизация (admin-api 0.11.0, миграция БД) → пересборка `64c2539` ✅.
## Инвентарь образов (откат-цепочка, 2026-08-16)
- `64c2539` — текущий (admin-api 0.11.0 array-canon)
- `1128ddc` — core 0.26.7 (фикс 500)
- `f876e70` — заглушки каталога → фото (3 шт.)
- `24a13da` — «Брус антисептированный» фото
- `40806b1` — services-[slug] настоящий SSR 404
- `340c0e7` — выпил «Строительство каркасных домов»
- `8b7e8c4` — до дня деплоев (SMTP-фикс)
Source-of-truth compose: `host-stacks/vds-kzntsv/pilonuxt.compose.yml` (всегда актуализировать
после PUT). Деплой-ранбук: монорепа `apps/web/.wiki/concepts/docker-deploy.md`.