Вы читаете предварительную версию v0.1. API могут измениться.
~ 1 мин чтенияОбновлено 2026-10-29

Устранение неполадок Elang

Начните с точной команды или URL, которые вызвали сбой. Отметьте HTTP-статус, версию PHP и последнее выполненное действие. Небольшую воспроизводимую проблему легче решить, чем менять сразу несколько настроек.

PHP или Composer не распознаётся

После установки любого из инструментов заново откройте терминал. Выполните where.exe php в Windows или command -v php в macOS и Linux. Если результат указывает на старую установку, исправьте PATH вместо изменения требований Elang.

Выполните php -v и composer --version. Elang требует PHP 8.3+ в пределах ветки PHP 8.x и Composer 2. Если какая-либо команда недоступна, пройдите урок по окружению.

Composer сообщает об отсутствующем расширении

Выполните php --ini, чтобы найти конфигурацию CLI, затем php -m, чтобы проверить загруженные модули. Включите или установите указанное расширение для той версии PHP, которую действительно использует Composer.

Не используйте --ignore-platform-reqs, чтобы скрыть проблему. Это может привести к установке, которая завершится ошибкой при выполнении. Установка расширения для PHP-FPM не обязательно включает его для CLI PHP, и наоборот.

Отсутствует vendor/autoload.php

Перейдите в каталог, содержащий composer.json вашего приложения, затем выполните:

composer install

Дождитесь успешного завершения команды. Каталог vendor/ создаётся Composer и намеренно исключён из скачиваемого исходного кода и Git-репозитория.

Ключ приложения отсутствует или недопустим

Выполните php elang key:generate из каталога приложения. После этого doctor должен сообщить о корректном ключе шифрования.

Ключ должен быть 32-байтовым значением в кодировке base64. Храните .env в закрытом доступе. Не заменяйте действующий ключ рабочей среды только ради диагностики посторонней ошибки: прежние зашифрованные данные зависят от этого ключа. Генератор отказывается заменять непустой ключ без --force.

Не удаётся подключиться к базе данных

Выполните php elang doctor. Для SQLite проверьте, что включён pdo_sqlite и родительский каталог базы данных доступен для записи. Для MySQL или PostgreSQL проверьте соответствующий драйвер PDO, доступность сервера, имя базы данных и учётные данные.

Кодируйте специальные символы в учётных данных подключения в формате URL. Никогда не вставляйте реальный URL подключения в публичную задачу. Doctor скрывает учётные данные в своём выводе.

Таблица отсутствует или не существует

Подключение может работать, даже если схема ещё не создана. Выполните:

php elang migrate:status
php elang migrate

В рабочей среде проверьте ожидающие файлы миграций и используйте --force только после подготовки резервной копии. Если вы изменили DATABASE_URL, теперь вы можете обращаться не к той базе данных, к которой применяли миграции.

Маршрут возвращает 404

Выполните php elang routes. Сравните метод и путь со своим запросом. Требование параметра, например [0-9]+, намеренно отклоняет /posts/hello.

Если / работает, а другие страницы на веб-сервере нет, проверьте корневой веб-каталог и правило перенаправления. Apache должен учитывать включённый .htaccess; Nginx требуется правило try_files, которое достигает index.php.

404 означает, что запрошенный ресурс не найден. Не следует исправлять это, превращая все отсутствующие страницы в ответы 200.

Запрос возвращает 405

Путь существует, но HTTP-метод не совпадает. Форме POST нужен маршрут POST. Проверьте заголовок ответа Allow и список маршрутов. Адресная строка браузера отправляет GET, поэтому через неё нельзя напрямую проверить эндпоинт, принимающий только POST.

Форма возвращает 419

Токен CSRF отсутствует, просрочен или относится к другой сессии. Снова откройте форму и отправьте заново сформированный токен. Убедитесь, что SessionMiddleware выполняется перед CsrfMiddleware, форма содержит _token, а браузер принимает cookie сессии.

При использовании fetch с cookie между разными источниками важны правила источников и cookie. Во время обучения начните с формы того же источника. CSRF не заменяет вход или авторизацию.

API возвращает 400, 415 или 422

  • 400: JSON не удалось разобрать, параметр имеет недопустимую форму или структура запроса неверна.
  • 415: Эндпоинт ожидает Content-Type: application/json.
  • 422: Разбор прошёл успешно, но поле не прошло валидацию. Прочитайте объект errors, а не угадывайте, какое поле вызвало ошибку.

Посмотрите разницу на конкретных запросах в примере валидации.

Запрос возвращает 429

Достигнуто ограничение частоты API-запросов. Подождите в течение периода Retry-After. Во время тестирования повторные вызовы с одного определённого IP-адреса используют общий счётчик. Обработку клиентского IP за обратным прокси нужно настраивать осознанно; не доверяйте произвольным перенаправленным заголовкам вслепую.

Страница возвращает 500

Найдите идентификатор запроса в ответе и изучите storage/logs/app.log на сервере. Ответы рабочей среды скрывают внутренние сообщения исключений. Рядом с этим идентификатором запроса ищите отсутствующую привязку, переменную шаблона, ошибку подключения или проблему прав доступа к файлу.

Воспроизведите проблему локально. Предоставьте минимальный пример и очищенный контекст журнала, а не учётные данные, закрытые данные пользователей или весь файл окружения рабочей среды.

Изменения не видны

Проверьте, что вы изменили обслуживаемое приложение, а не другую рабочую копию. Перезагрузка исходников Twig включена. Официальный сайт версионирует URL CSS и JavaScript по времени изменения файлов.

Для собственных ресурсов меняйте версию или имя файла при развёртывании обновлений. Если вы используете PHP OPcache с отключённой проверкой времени изменения, при развёртывании необходимо перезапустить соответствующие процессы PHP. Не сбрасывайте посторонние сервисы вслепую.

Проблема осталась

Прочитайте урок по отладке. Полезное сообщение о проблеме включает ревизию фреймворка, версию PHP, команду или запрос, ожидаемый результат, фактический результат и небольшой пример воспроизведения. Словарь объясняет термины, используемые при обсуждении ошибок.

Нужна помощь?

Проверьте руководство по решению проблем, найдите термин в глоссарий, или пройдите полноценный проект доски задач.

Поиск по документации Elang

Начните вводить, чтобы найти следующий шаг.