Загрузчик
Загрузчик
Заголовок раздела «Загрузчик»Модуль wippy/bootloader управляет инициализацией приложения, обнаруживая и запуская функции загрузчика в определённом порядке при старте. Другие модули фреймворка (миграции, шифрование, обновление индекса) регистрируют загрузчики для выполнения собственных шагов инициализации.
Настройка
Заголовок раздела «Настройка»Добавьте модуль в проект:
wippy add wippy/bootloaderwippy installОбъявите зависимость и необходимый хост приложения:
version: "1.0"namespace: app
entries: - name: processes kind: process.host lifecycle: auto_start: true
- name: os_env kind: env.storage.os
- name: dep.bootloader kind: ns.dependency component: wippy/bootloader version: "*" parameters: - name: application_host value: app:processes - name: env_storage value: app:os_envСам загрузчик работает как wippy.bootloader:bootloader.service (process.service с auto_start: true). Больше ничего не требуется для его активации.
Как это работает
Заголовок раздела «Как это работает»При старте загрузчик:
- Обнаруживает в реестре каждую запись с
meta.type: bootloader. - Сортирует их по
meta.orderпо возрастанию (наименьшие первыми). - Выполняет каждую последовательно как функцию Lua.
- Останавливается на первой ошибке, возвращающей
status = "error". - Сообщает по завершении общее число / успешных / неудачных / пропущенных.
Загрузчики автономны — каждый проверяет свои условия, выполняет работу и возвращает структурированный результат.
Определение загрузчика
Заголовок раздела «Определение загрузчика»Загрузчик — это любая запись function.lua с meta.type: bootloader:
- name: seed_defaults kind: function.lua meta: type: bootloader order: 50 description: Seed default rows for a new install source: file://seed_defaults.lua method: run modules: - logger imports: sql: :sql| Поле | Обязательно | Описание |
|---|---|---|
meta.type | Да | Должно быть bootloader |
meta.order | Нет | Порядок выполнения (по умолчанию 100); меньшие выполняются первыми |
meta.description | Нет | Человекочитаемое описание |
meta.requires | Нет | Подсказки о зависимостях, отображаемые в логах |
Контракт возврата
Заголовок раздела «Контракт возврата»Метод method возвращает таблицу, описывающую результат:
local function run() local ok, err = apply_seed() if err then return { status = "error", message = "seed failed: " .. tostring(err) } end
if not ok then return { status = "skipped", message = "already seeded" } end
return { status = "success", message = "seeded default rows" }end
return { run = run }| Статус | Значение |
|---|---|
success | Работа выполнена |
skipped | Без действий (уже выполнено, предусловие не соблюдено) |
error | Сбой — останавливает последовательность загрузки |
Загрузчик, выбрасывающий ошибку Lua, обрабатывается как error.
Порядок выполнения
Заголовок раздела «Порядок выполнения»Меньшие значения order выполняются первыми. Резервируйте низкие значения для инфраструктуры:
| Order | Типичное использование |
|---|---|
10 | Секреты и ключи шифрования (предоставляется модулем) |
20 | Миграции схемы (предоставляется wippy/migration) |
50 | Заполнение данных, прогрев поискового индекса |
100 | По умолчанию — задачи уровня приложения |
Когда два загрузчика имеют одинаковый порядок, последовательность выполнения между ними не гарантируется.
Встроенные загрузчики
Заголовок раздела «Встроенные загрузчики»Ключ шифрования (порядок 10)
Заголовок раздела «Ключ шифрования (порядок 10)»Генерирует 256-битный ENCRYPTION_KEY и сохраняет его через настроенный env_storage, если значение отсутствует. Другие модули (безопасность, отслеживание использования) читают эту переменную для envelope-шифрования. Пропускается, если переменная уже существует.
Загрузчик миграций (порядок 20)
Заголовок раздела «Загрузчик миграций (порядок 20)»Предоставляется wippy/migration. Обнаруживает каждую запись с meta.type: migration, группирует их по meta.target_db и применяет ожидающие. См. Миграции.
Наблюдение за статусом загрузки
Заголовок раздела «Наблюдение за статусом загрузки»Сервис записывает в лог по одной строке на каждый загрузчик (SUCCESS, FAILED, SKIPPED) с ID записи, порядком и длительностью. Итоговая строка сводки сообщает агрегированные счётчики. Сбойный загрузчик прерывает старт — к bootloader.service далее применяется политика рестарта супервизора.
См. Также
Заголовок раздела «См. Также»- Миграции - Загрузчик миграций и DSL
- Супервизия - Жизненный цикл сервиса и политика рестарта
- Обзор фреймворка - Использование модулей фреймворка