AxiosError "Запрос не выполнен с кодом состояния 500" после обновления до PHP 8.x и Laravel 9.x

  • Я пытаюсь обновить версию PHP моего проекта до 8.2 и версию моего Laravel до 9.x.
  • Старыми версиями были PHP 7.3 и Laravel 8.x. До обновления все работало как положено.
  • После обновления до указанных версий я столкнулся с проблемой некоторых вызовов API.

Проблема в настоящее время происходит локально для меня, не пытался загрузить ее на сервер. Иногда (но не всегда) случайные вызовы API в моем проекте возвращают следующую ошибку:

AxiosError {message: 'Request failed with status code 500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE', config: {…}, request: XMLHttpRequest, …}
code: 
"ERR_BAD_RESPONSE"

config: 
{transitional: {…}, adapter: Array(2), transformRequest: Array(1), transformResponse: Array(1), timeout: 0, …}

message: 
"Request failed with status code 500"

name: 
"AxiosError"

request: 
XMLHttpRequest {onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}

response: 
{data: '{\n    "message": "Server Error"\n}{\n    "message": "Server Error"\n}', status: 500, statusText: 'Internal Server Error', headers: AxiosHeaders, config: {…}, …}

stack: 
"AxiosError: Request failed with status code 500\n    at settle (webpack-internal:///./node_modules/axios/lib/core/settle.js:24:12)\n    at XMLHttpRequest.onloadend (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:120:66)"

[[Prototype]]: 
Error

Это то, что я получаю в своей консоли. На вкладке сети просто написано: "message": "Server Error"

Я упомяну:

  • Я использую Vue 2 в качестве внешнего интерфейса и PHP/Laravel в качестве внутреннего интерфейса.
  • Мои вызовы API выполняются с помощью пакета axios.
  • У меня ОС Windows 10 и я использую XAMPP.
  • Моя IDE — это Visual Studio Code, если это имеет значение.

Я знаю, что ошибка, которую я упомянул, не слишком много говорит, вероятно, и звучит так же, как какая-то общая ошибка сервера, но что может быть причиной?

Обновления работали нормально, и я убедился, что у меня PHP 8.2, с помощью команды php -v.

Я поправил все файлы конфигурации, такие как php.ini, httpd.conf и т. д. (могу загрузить, если нужно).

И последнее, что я хотел бы упомянуть, это то, что по какой-то странной причине, когда я использую Xdebug для отладки моего проекта и размещаю точки останова в начале каждой функции контроллера (направление, куда мой вызов API идет в бэкэнде) - ошибки никогда не появляются. Но это, очевидно, не решение, так как я не хочу заполнять все свои внутренние функции точками останова, а Visual Studio будет всплывать при каждом вызове API.

Обновлено: просмотрев журнал Laravel, я увидел следующее: «production.ERROR: ключ шифрования приложения не указан». Посмотрев, я нашел решение использовать следующие команды: php artisan key:generate, php artisan config:cache. Они вызвали другую ошибку, самый первый вызов API моего проекта выдал ошибку - файл .env больше не читался после команд. строка кода, например: "env('OKTA_CLIENT_ID')" теперь возвращает null вместо фактического значения.

Любая помощь будет оценена, спасибо.

Если ваш сервер выдает такую ​​ошибку, обычно фронтенд не виноват. Но, пожалуйста, взгляните на журнал ошибок вашего сервера. Если он еще не содержит никаких подробностей, используйте более высокий уровень сообщения об ошибках.

Nico Haase 04.04.2023 12:19

`xdebug.start_with_request=yes'" -- Вы настроили Xdebug на попытку отладки каждого отдельного запроса/скрипта. Это объясняет ваши сообщения «Xdebug: [Step Debug] Time-out при подключении к клиенту отладки...». Обратите внимание, что это будет работать так же в вашем предыдущем PHP/Laravel, если у вас также есть Xdebug v3.x.

LazyOne 04.04.2023 14:51

Но это не должно быть причиной (поскольку Xdebug отправляет его только в журнал ошибок PHP или консоль, если это CLI). Я предлагаю вам добавить журнал трассировки в ваш код в конечных точках, которые терпят неудачу (вы знаете, что-то вроде $log->write('entering this step / finished that step'); своего рода пользовательского ведения журнала и смотрите, на каком этапе он обычно терпит неудачу.

LazyOne 04.04.2023 15:00

@LazyOne, согласно руководству по обновлению Xdebug с 2 до 3, они говорят, что переключите «xdebug.remote_autostart = 1» на «xdebug.start_with_request = yes». И у меня был такой вариант раньше. Я не знаю, может быть, эти предупреждения относительно Xdebug появились и до перехода с версии 2 на 3.

Gady Eilat 04.04.2023 15:11

Такое предупреждение было введено в Xdebug v3. Это делается специально, чтобы пользователь знал, что подключение отладчика не было успешным (поскольку этот параметр предполагает, что вы ХОТИТЕ отлаживать каждый сценарий, поэтому он ожидает, что вы также захотите иметь этот сеанс отладки). К сожалению, нет возможности отключить его (также мы сообщаем, когда используются параметры Xdebug v2). Это сообщение отправляется с использованием функций PHP error_log, поэтому оно попадает в журнал ошибок и/или в стандартный вывод для сеансов CLI. Это не должно быть причиной ваших 500 ответов TBH, но лучше отключить и перепроверить тестами.

LazyOne 04.04.2023 15:19

О вызовах API, которые терпят неудачу, это каждый раз другой вызов API, иногда вызов работает, иногда нет. Посмотрев журнал Laravel, я увидел следующее: «production.ERROR: ключ шифрования приложения не указан». Посмотрев, я нашел решение использовать следующие команды: php artisan key:generate, php artisan config:cache. Они вызвали другую ошибку, самый первый вызов API моего проекта выдал ошибку - файл .env больше не читался после команд. строка кода, например: "env('OKTA_CLIENT_ID')" теперь возвращает null вместо фактического значения.

Gady Eilat 04.04.2023 15:22

«Самый первый вызов API моего проекта выдает ошибку - файл .env больше не читается после команд». Может быть что-то с кешированием Laravel или одним из пакетов. Сам никогда не сталкивался с такой проблемой. Попробуйте очистить все кеши и запустить без них (вы запускаете его локально на своей машине разработки, верно?) Возможно, также включите DEBUG в конфигурации окружения Laravel...

LazyOne 05.04.2023 11:27

@LazyOne, я очистил все кеши, и это действительно устранило проблему, но вернуло исходную проблему сбоя некоторых вызовов API. Так что я побежал artisan key:generate, php artisan config:cache снова. И тогда мой проект заработал нормально. Только не хватает одного последнего кусочка. Теперь, если я очищаю данные просмотра своего браузера (например, в Chrome - очистка кеша и файлов cookie), это возвращает меня к проблеме с файлом .env, который не читается. Приходится повторять все заново, и это немного раздражает.

Gady Eilat 09.04.2023 09:10

Есть ли способ автоматически очистить весь кеш + сгенерировать ключ и config:cache через код всякий раз, когда я впервые захожу в проект? (например, после очистки кеша браузера)? Или, может быть, есть какое-то другое более правильное решение для этого?

Gady Eilat 09.04.2023 09:11
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
0
9
273
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

РЕШЕНО!

Ошибка: production.ERROR: No application encryption key has been specified была устранена с помощью команды: php artisan config:cache.

«Файл .env больше не читался после команд» было исправлено с помощью команды php artisan config:clear.

Впоследствии, чтобы исправить повторяющуюся проблему каждый раз, когда я очищал кеш браузера, я добавил две следующие строки в мой файл UserController.php, часть этого файла вызывается только тогда, когда пользователь является новым пользователем или когда конфигурация была сброшена. строки:

Artisan::call('config:clear');Artisan::call('config:cache');

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

Другие вопросы по теме