- записи, метаданные и файлы съехались под один каталог данных; появилась панель владельца, а gin, goqu, goose и требование CGO ушли - захват задачи стал одним запросом с RETURNING; заведены число попыток, состояние dead и нарастающая пауза вместо признака is_error - имя файла в хранилище задаёт сервис и в журнал не идёт: вместе с идентификатором записи оно собирало бы ссылку на скачивание
51 lines
3.8 KiB
Markdown
51 lines
3.8 KiB
Markdown
# Каталог данных задаётся одним ключом `[storage] data_dir`
|
||
|
||
- **Дата:** 2026-08-12
|
||
- **Источник:** [../../openspec/changes/archive/2026-08-12-pocketbase-storage/design.md](../../openspec/changes/archive/2026-08-12-pocketbase-storage/design.md),
|
||
раздел «Ключи конфигурации: два пути заменяются одним каталогом»
|
||
|
||
## Решение
|
||
|
||
Ключи `[database] path` и `[storage] path` уходят. Вместо них — один
|
||
`[storage] data_dir` со значением `data`: база и файлы записей лежат под одним
|
||
каталогом, и по-другому хранилище не умеет.
|
||
|
||
Выбор сделан человеком 2026-08-12 из трёх названных вариантов.
|
||
|
||
## Почему
|
||
|
||
Имя ключа конфигурации проект объявил необратимым
|
||
([../../CLAUDE.md](../../CLAUDE.md), «Работа»): переименование правится не в
|
||
одном файле, а в конфигурации на сервере и в выкладке, и молча ломает запуск.
|
||
Поэтому выбор ушёл человеку, а не был принят по ходу.
|
||
|
||
Цитата источника о цене каждого варианта:
|
||
|
||
> - `[storage] data_dir` — **выбрано**. Ключ назван по назначению, как названы и
|
||
> сегодняшние; смена библиотеки через год имени не тронет. Слово `storage` при
|
||
> этом уже занято capability, но в конфигурации оно значит ровно то же — где
|
||
> лежат данные;
|
||
> - `[pocketbase] data_dir` — прямее всего читается тем, кто знает библиотеку, и
|
||
> вписывает имя поставщика в необратимый ключ. Смена библиотеки потребует
|
||
> второго необратимого переименования;
|
||
> - `[data] dir` — короче и нейтральнее всех, но `data` в проекте уже значит
|
||
> каталог на диске, и секция с таким именем читается как «настройки каталога»,
|
||
> а не «настройки хранилища».
|
||
|
||
Запись попадает в журнал по **дорогому откату**: переименование ключа стоит
|
||
правки конфигурации на сервере и в выкладке, а ошибка проявляется отказом старта.
|
||
|
||
## Последствия
|
||
|
||
- `+` имя ключа не называет поставщика, и смена библиотеки хранилища второго
|
||
необратимого переименования не потребует.
|
||
- `+` каталог данных один, и запрет «боевой каталог не трогать» покрывает и базу,
|
||
и записи одной строкой.
|
||
- `−` слово `storage` в проекте теперь значит три вещи: capability, само
|
||
хранилище и секцию конфигурации. Поле записи о файле от этого переименовано в
|
||
`location` — чтобы смыслов было три, а не четыре.
|
||
- `−` прежние конфигурации несовместимы: сервис на старом `config.toml`
|
||
поднимется на умолчании `data`, а не на прежних путях. Данные при этом не
|
||
переносятся по решению задачи, так что цена нулевая ровно сейчас и была бы не
|
||
нулевой при переносе.
|