Skip to content

Решение проблем

Распространённые проблемы при работе с можно. и способы их решения.

SDK

SDK не подключается к серверу

Симптом: клиент не стартует, start() выбрасывает исключение или Promise отклонён.

Причины и решения:

ПричинаРешение
Неверный URL сервераПроверьте mozhnoUrl / url. Должен быть полный URL с протоколом.
Неверный API-ключПроверьте apiKey. Ключ показан только один раз при создании — создайте новый, если утерян.
Сервер недоступенcurl http://localhost:8080/actuator/health. Если нет ответа — сервер не запущен.
Несовпадение окруженияAPI-ключ привязан к окружению. Ключ от dev не даст доступ к production.
Сетевые ограниченияПроверьте firewall, VPN, прокси.

Флаг всегда возвращает false

Причины:

ПричинаРешение
Флаг в архивеВосстановите флаг: POST /api/v1/flags/{id}/unarchive
Стратегия выключенаПроверьте в веб-панели: enabled: true
Контекст не совпадаетПроверьте атрибуты контекста и правила таргетинга
Флаг не существуетПроверьте ключ на опечатки. isEnabled возвращает false для неизвестных флагов.
Кеш устарелПодождите polling-интервал (15 сек) или перезапустите SDK

Флаги не обновляются после изменения в панели

Причина: polling-интервал.

Решение:

  • По умолчанию SDK опрашивает сервер каждые 15 секунд
  • Дождитесь следующего цикла поллинга
  • Уменьшите fetchTogglesInterval / refreshInterval (но не ниже 5 секунд)
  • Для мгновенного применения используйте Kill Switch

SDK выбрасывает исключение при старте

В Java SDK при synchronousFetchOnInitialisation(true):

java
// При недоступном сервере выбросит исключение
MozhnoConfig config = MozhnoConfig.builder()
    .synchronousFetchOnInitialisation(true)  // <-- вот причина
    .build();

Решение: оберните в try/catch или отключите синхронную загрузку (SDK продолжит фоновые ретраи).

Аутентификация

«401 UNAUTHORIZED» на все запросы

ПричинаРешение
JWT истёк (15 мин)Обновите токен через POST /api/v1/auth/refresh
Refresh-токен истёк (30 дней)Перелогиньтесь
TOKEN_REUSEВаш refresh-токен был использован повторно (возможная компрометация). Перелогиньтесь.
Неверный формат заголовкаДолжно быть Authorization: Bearer <token>

«403 FORBIDDEN»

РольДоступ
VIEWERТолько чтение. Нельзя создавать/изменять флаги.
DEVELOPERНельзя управлять пользователями и API-ключами.

Запросите повышение роли у ADMIN.

База данных

Сервер не стартует: «Connection refused»

Причина: PostgreSQL недоступна.

Решение:

  1. Проверьте SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORD
  2. Убедитесь, что PostgreSQL запущен: pg_isready -U flags_user -d feature_flags
  3. В Docker: проверьте depends_on: postgres: service_healthy

Миграции Flyway не применяются

Симптом: ошибки liquibase или таблицы не созданы.

Решение:

  1. Проверьте SPRING_FLYWAY_ENABLED=true
  2. Проверьте SPRING_FLYWAY_LOCATIONS=classpath:db/migration
  3. Посмотрите таблицу flyway_schema_history в БД — есть ли в ней записи

Метрики

Метрики не отображаются в панели

ПричинаРешение
disableMetrics: true в SDKУберите или поставьте false
Интервал ещё не прошёлМетрики отправляются раз в 60 секунд
CLIENT_MAX_METRICS_PER_KEY превышенУвеличьте лимит или удалите старые метрики

Sparkline-график пустой

Метрики накапливаются со временем. Дайте SDK поработать хотя бы 5–10 минут, чтобы появились данные.

Rate Limiting

«429 RATE_LIMIT_EXCEEDED»

Вы превысили лимит запросов. Лимиты:

ОперацияЛимит
Логин5 попыток в минуту
Сброс пароля / приглашение3 попытки в час
Refresh токен10 попыток в минуту
SDK-запросы1000 в минуту
Admin write-операции100 в минуту

Решение: дождитесь следующего интервала пополнения или увеличьте лимиты через переменные окружения.

Деплой

Docker-контейнер перезапускается

Причины:

  1. База данных не готова — увеличьте start_period в healthcheck
  2. Переменная JWT_SECRET не задана в проде
  3. Недостаточно памяти — проверьте docker stats, увеличьте deploy.resources.limits.memory

502 / 504 за обратным прокси

Увеличьте таймауты прокси:

nginx
proxy_read_timeout 60s;
proxy_connect_timeout 10s;

Что дальше?

Released under the AGPL v3.0 License.