4.8 KiB
title, type, tags, sources, related, updated
| title | type | tags | sources | related | updated | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| pilonuxt: рестарт vs пересборка (in-memory viewModel кэш content-api) | concept |
|
|
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)
- Новинки не видны + цены нет → прогер просит рестарт (кэш). Рестарт → цены появились ✅ (но 500 на категориях остался — это другой класс).
- 500 на категориях новинок → логи показали краш core → root cause у snolla (Content
object vs array) → фикс core 0.26.7 → пересборка
1128ddc→ 6+6 товаров 200 ✅. - Затем 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 404340c0e7— выпил «Строительство каркасных домов»8b7e8c4— до дня деплоев (SMTP-фикс)
Source-of-truth compose: host-stacks/vds-kzntsv/pilonuxt.compose.yml (всегда актуализировать
после PUT). Деплой-ранбук: монорепа apps/web/.wiki/concepts/docker-deploy.md.