ПеременныеУстранение неполадокСекрет или ссылка не отображаются

Секрет или ссылка не отображается в моем сервисе

Вы задали секрет или ${{name.KEY}} ссылку, переразвернули сервис, но работающий сервис всё равно не видит ожидаемое значение.

Что это значит

Заданное значение никогда не попало в объединённое окружение сервиса — или что-то другое при слиянии перезаписало его до запуска приложения.

Почему это может происходить

  • Цель ссылки или ключ не существует. Ссылка на несуществующее имя сервиса/аддона или на ключ, который аддон не предоставляет, преобразуется в пустую строку вместо ошибки развёртывания. В логе сборки для каждой пустой ссылки выводится предупреждение с указанием причины; если изменение переменной применено перезапуском, без сборки, предупреждения не будет. Переименованная цель считается отсутствующей: ссылки сопоставляются с текущим именем.
  • Что-то с более высоким приоритетом перекрыло его. Значения объединяются в фиксированном порядке — addon-issued env < project secrets < project env < app env < app secrets < platform vars — поэтому секрет уровня проекта (--global) может быть неявно перекрыт секретом уровня сервиса с тем же ключом, а платформенные переменные (PORT, LIZARD_SERVICE_NAME, LIZARD_PROJECT_ID, LIZARD_PUBLIC_DOMAIN, LIZARD_PRIVATE_DOMAIN) всегда побеждают. Если задать PORT самостоятельно, Lizard вместо этого начнёт маршрутизировать на указанный порт, если только порт не был задан через lizard port.
  • Значение времени сборки не попало в сборку. Большинство изменений переменных применяются без пересборки — сервис перезапускается, чтобы их подхватить. VITE_* и NEXT_PUBLIC_* запекаются в собранные артефакты, и их изменение сразу запускает пересборку работающих сервисов. Сервис, который в этот момент упал или был остановлен, пропускается, а сервис с собственным dockerfilePath или загруженный через lizard up без команд сборки/запуска никогда не получает эти значения во время сборки.

Возможные решения

Проверьте лог сборки на пустые ссылки

Доступ к оболочке сервисов (lizard ssh) отключён. Смотреть нужно в лог сборки: для каждой пустой ссылки там есть строка вида ==> Warning: ... is empty с указанием причины.

lizard logs --build --service api

Затем выведите шаблоны ссылок, допустимые в этой области, и сравните имя и ключ со своими. Ключи проверяйте по документированным переменным аддона:

lizard secrets list --service api --ref

Проверьте на предмет коллизии областей

Выведите секреты в обеих областях и сравните:

lizard secrets list --service api --show
lizard secrets list --global --show

Помните: секреты приложения перекрывают секреты проекта — если существует значение уровня сервиса для того же ключа, оно побеждает всё, что задано через --global.

Пересоберите после изменения на этапе сборки

Если изменённый ключ — VITE_* или NEXT_PUBLIC_*, а сервис в момент изменения был упавшим или остановленным, запустите пересборку:

lizard redeploy --service api

См. Время сборки vs. время выполнения и Сборка Pipeline → что запускает пересборку.

См. также

Обновлено