Troubleshooting¶
FAQ и решение типичных проблем.
Генерация¶
Ошибка "main.name is required"¶
Причина: Отсутствует обязательное поле main.name в конфигурации.
Решение:
Ошибка "duplicate rest name"¶
Причина: Два REST транспорта с одинаковым именем и версией.
Решение: Используйте уникальные комбинации name + version:
Файлы не генерируются¶
Причина: Неправильный путь к target директории.
Решение:
# Используйте абсолютный путь
go-project-starter --config=config.yaml --target=/home/user/my-project
# Или убедитесь, что директория существует
mkdir -p ./my-project
go-project-starter --config=config.yaml --target=./my-project
Ogen: ошибки компиляции¶
"undefined: oas.ErrorDefault" или "undefined: oas.ErrorDefaultStatusCode"¶
Причина: В OpenAPI-спецификации отсутствует схема ErrorDefault или она имеет другое имя/структуру. Генератор ожидает, что ogen создаст типы ErrorDefault и ErrorDefaultStatusCode с конкретными полями.
Решение: Добавьте в components.schemas вашей OpenAPI-спецификации:
components:
schemas:
ErrorDefault:
required:
- code
- error
properties:
code:
type: integer
format: int32
error:
type: string
type: object
И используйте $ref: '#/components/schemas/ErrorDefault' в default ответах endpoints.
Что генерирует ogen из этой схемы:
ErrorDefault— struct{ Code int32; Error string }с методомEncode(e *jx.Encoder)ErrorDefaultStatusCode— struct{ StatusCode int; Response ErrorDefault }
Оба типа используются в сгенерированных файлах error_response.go, handler/handler.go и router.go.
"errResp.Encode undefined" или "errResp.Code undefined"¶
Причина: Схема ErrorDefault определена, но с другими полями. Генератор ожидает поля code (int32) и error (string).
Решение: Проверьте, что структура схемы точно соответствует примеру выше. Поля code и error — обязательны и должны быть именно такого типа.
Сборка проекта¶
"cannot find package"¶
Причина: Зависимости не загружены.
Решение:
"undefined: ogen"¶
Причина: Ogen код не сгенерирован.
Решение:
Приватные модули не загружаются¶
Причина: Не настроен GOPRIVATE.
Решение: Добавьте в конфигурацию:
Docker¶
"Cannot connect to Docker daemon"¶
Причина: Docker не запущен.
Решение:
"port is already allocated"¶
Причина: Порт занят другим процессом.
Решение:
# Найти процесс
lsof -i :8080
# Или изменить порт в docker-compose
# Или остановить conflicting контейнер
docker compose down
Dev Stand¶
OnlineConf updater не создаёт TREE.cdb¶
Причина: Проблемы с MySQL или Admin UI.
Решение:
# Проверить логи
docker compose -f docker-compose-dev.yaml logs onlineconf-updater
docker compose -f docker-compose-dev.yaml logs onlineconf-database
# Пересоздать окружение
make dev-drop
make dev-up
Изменения в init-config.sql не применяются¶
Причина: MySQL выполняет init-скрипты только при первом запуске.
Решение:
Submodule не инициализирован¶
Причина: OnlineConf submodule не загружен.
Решение:
Тесты¶
"API did not become ready"¶
Причина: Приложение не запустилось.
Решение:
- Проверьте бинарник:
ls -la /tmp/api - Проверьте Docker:
docker ps - Посмотрите логи:
tail -f /tmp/yourproject-test-*.log
"Database connection refused"¶
Причина: Testcontainers не запустили PostgreSQL.
Решение:
- Проверьте Docker daemon
- Проверьте права на Docker socket
- Увеличьте таймаут запуска
"TestEnvInitializer not implemented"¶
Причина: Не создан файл tests/init.go.
Решение: Создайте файл с реализацией интерфейса (см. GOAT).
CI/CD¶
"permission denied" в GitHub Actions¶
Причина: Неправильные секреты или права.
Решение:
- Проверьте секреты в Settings → Secrets
- Убедитесь, что SSH ключ правильный
- Проверьте права на registry
Docker push fails¶
Причина: Неверные credentials для registry.
Решение:
# GitHub Container Registry
gh secret set GHCR_USER --body "username"
gh secret set GHCR_TOKEN --body "ghp_..."
# Проверьте локально
docker login ghcr.io -u username -p token
Общие советы¶
Предпросмотр изменений¶
Используйте --dry-run перед генерацией:
Логирование¶
Включите debug логирование:
Версии инструментов¶
Убедитесь, что версии совместимы:
Очистка и перегенерация¶
При серьёзных проблемах:
# Сохраните ваш код
cp -r internal/app/*/transport/rest/*/handler.go /tmp/backup/
# Удалите сгенерированные файлы
rm -rf cmd/ internal/ pkg/ Makefile Dockerfile docker-compose.yaml
# Перегенерируйте
go-project-starter --config=config.yaml
# Восстановите ваш код
cp /tmp/backup/*.go internal/app/*/transport/rest/*/
Получение помощи¶
Если проблема не решена:
- Проверьте GitHub Issues
- Создайте новый issue с:
- Версия генератора (
go-project-starter --version) - Конфигурация (без секретов)
- Полный вывод ошибки
- Шаги воспроизведения