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

4.8 KiB
Raw Blame History

title, type, tags, sources, related, updated
title type tags sources related updated
pilonuxt: рестарт vs пересборка (in-memory viewModel кэш content-api) concept
pilonuxt
deploy
ops
cache
content-api
portainer
concepts/admin-api-embed-pilonuxt.md
concepts/namespace-consolidation-snolla.md
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), потребовал пересборки (1128ddc64c2539), рестарт не помог бы.

Правило: 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.