<span id="a-secret-or-reference-isnt-showing-up-in-my-service" />

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

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

<span id="what-this-means" />

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

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

<span id="why-this-can-happen" />

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

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

<span id="possible-solutions" />

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

<span id="confirm-what-the-running-service-actually-sees" />

### Убедитесь, что видит запущенный сервис

Это авторитетный источник — показывает окружение живого контейнера, а не то, что вы думали, что задали:

```bash
lizard ssh --service api -- env | grep DATABASE_URL
```

Если ключ отсутствует или пуст, цель ссылки/ключ неверны, или для этой области ничего не задано. Проверьте имя аддона или сервиса через `lizard ps`, а ключ — с [документированными переменными](https://lizard.build/ru/docs/addons) аддона.

<span id="check-for-a-scope-collision" />

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

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

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

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

<span id="rebuild-after-a-build-time-change" />

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

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

```bash
lizard redeploy --service api
```
См. [Время сборки vs. время выполнения](https://lizard.build/ru/docs/variables#build-time-vs-runtime) и [Сборка Pipeline → что запускает пересборку](https://lizard.build/ru/docs/concepts/build-pipeline#what-triggers-a-rebuild).

<span id="see-also" />

## См. также

- [Переменные и секреты](https://lizard.build/ru/docs/variables) — области действия и приоритет.
- [Межсервисные ссылки](https://lizard.build/ru/docs/variables/references) — синтаксис ссылок и их разрешение.
