Бэкапы: БД без таблиц не становится снимком, первый бэкап ждёт приложение
guard_empty считал неизвестные счётчики («?» — нет таблиц users/matches) непустыми, и снимок без данных уходил в оба репозитория и становился latest — restore latest в сценарии «Pi умер» падал на verify_staging. Теперь это отказ, как для пустой БД (обход — --allow-empty). entrypoint перед самым первым бэкапом ждёт /api/health приложения (до BACKUP_APP_WAIT_SECONDS, 600 с): оно отвечает только после миграций. Не дождались — пробуем всё равно, guard не пропустит БД без таблиц. README, раздел 9: новые строки журнала, снимки с «?» больше не создаются. #74 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
+12
-5
@@ -737,16 +737,23 @@
|
||||
```
|
||||
|
||||
3. Дождитесь, пока приложение создаст пустую БД (`docker compose ps` → `app` `(healthy)`).
|
||||
Контейнер `backup` стартует одновременно с `app` и сразу пробует сделать первый бэкап. В его
|
||||
журнале (`docker compose logs backup`) нормально увидеть одно из двух:
|
||||
Контейнер `backup` стартует одновременно с `app`, ждёт, пока приложение ответит (до
|
||||
10 минут), и пробует сделать первый бэкап. В его журнале (`docker compose logs backup`)
|
||||
нормально увидеть одно из трёх:
|
||||
|
||||
- если `backup` успел раньше, чем `app` создал БД:
|
||||
- если приложение так и не поднялось и БД нет:
|
||||
|
||||
```
|
||||
ОШИБКА: БД /fs-db/forbidden_stars.db не найдена — приложение ещё ни разу не запускалось?
|
||||
Первый бэкап не удался — следующая попытка по расписанию.
|
||||
```
|
||||
|
||||
- если БД есть, но без таблиц (миграции ещё не прошли):
|
||||
|
||||
```
|
||||
Не удалось прочитать число игроков и партий: в БД нет таблиц users/matches.
|
||||
```
|
||||
|
||||
- если БД уже была:
|
||||
|
||||
```
|
||||
@@ -763,8 +770,8 @@
|
||||
```
|
||||
|
||||
Проверьте, что у выбранного снимка в столбцах `Игроков`/`Партий` числа, а не `0` и не `?`.
|
||||
Защита выше не распознаёт БД без таблиц: если первый бэкап попал ровно в момент создания
|
||||
БД, в списке может появиться свежий снимок с `?` (задача #74). Такой снимок не выбирайте.
|
||||
Снимки без данных защита больше не создаёт, но снимок с `?` мог остаться от старой версии
|
||||
бэкапов — такой не выбирайте.
|
||||
|
||||
5. Восстановите, подставив ID из `list vps`:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user