У меня проблема с моим приложением Он развернут с помощью Symfony 6.3.2 на сервере. Я думаю, что он находится на сервере nginx с докером. Библиотека, используемая для API, — это API-платформа.
Всякий раз, когда я делаю вызовы API, например BASE_URL/api/currency 1-2 раза из 10 у меня ошибка Это часть следа
{
{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "unlink(): Argument #1 ($filename) must not contain any null bytes",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "unlink",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "Symfony\\Component\\HttpKernel\\Profiler",
"short_class": "FileProfilerStorage",
"class": "Symfony\\Component\\HttpKernel\\Profiler\\FileProfilerStorage",
"type": "->",
"function": "removeExpiredProfiles",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 182,
"args": []
}
Таким образом, ошибка связана с функцией unlink(), которая используется для удаления файлов. Судя по тому, что я прочитал в Новое в Symfony 6.3 (улучшения), они представили функцию автоматического удаления профилей через некоторое время. На практике при каждом запросе существует 10% случайная вероятность того, что Symfony активирует функцию удаления. При его активации любой профиль, созданный два дня назад или ранее, удаляется. Это, безусловно, объясняет, почему иногда мои запросы терпят неудачу, а иногда они работают. Это, безусловно, попытка удалить профили с истекшим сроком действия с помощью функции removeExpiredProfiles(). Странно то, что даже если запрос завершается неудачно, я получаю данные вначале.
Это пример того, когда это работает
{
"@context": "/api/contexts/Currency",
"@id": "/api/currencies/1",
"@type": "Currency",
"id": 1,
"uuid": "018ec2aa-3105-71a3-bc59-bd5e81b146ef",
"code": "EUR",
"name": "Euros"
}
И это пример того, когда это не удается
{
"@context": "/api/contexts/Currency",
"@id": "/api/currencies/1",
"@type": "Currency",
"id": 1,
"uuid": "018ec2aa-3105-71a3-bc59-bd5e81b146ef",
"code": "EUR",
"name": "Euros"
}{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "unlink(): Argument #1 ($filename) must not contain any null bytes",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "unlink",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "Symfony\\Component\\HttpKernel\\Profiler",
"short_class": "FileProfilerStorage",
"class": "Symfony\\Component\\HttpKernel\\Profiler\\FileProfilerStorage",
"type": "->",
"function": "removeExpiredProfiles",
"file": "/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php",
"line": 182,
"args": []
},
...
Любая помощь будет принята с благодарностью Спасибо
Я попытался клонировать бэкэнд локально в режиме разработки с точными версиями php, symfony и всех пакетов, установленных композитором, как те, что в prod. Я ожидал такой же ошибки в разработке и пришел к выводу, что некоторые библиотеки не обновлены. Но в разработке у меня никогда не было такой ошибки Я не понимаю, почему






Ошибка указывает на то, что проблема связана с профилировщиком. В производстве его обычно следует отключить.
Какую команду композитора вы использовали при установке пакетов?
Каково значение вашего APP_ENV в вашем файле .env?
Для установки пакетов я использовал установку композитора
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Необходимо убедиться, что в продакшене на производственных серверах для переменной APP_ENV установлено значение prod. В рабочей среде вам необходимо выполнить: композитор install –no-dev Добавление «-no-dev» исключает пакеты, необходимые для среды разработки (включая профилировщик). Таким образом, возможно, вы установили пакеты, связанные с разработкой, с APP_ENV=prod и, следовательно, у вас может возникнуть конфликт на этом уровне. Попробуйте удалить пакеты на сервере и повторно запустить установку композитора –no-dev.
APP_ENV на самом деле был установлен на dev. Спасибо. Установка его на prod решила проблему.
У меня нет доступа к фактической конфигурации продукта, я спрошу своего босса. В gitlab это APP_ENV=dev. Но когда профилировщик активен, мы видим полосу внизу страницы, верно?? У меня его нет в проде, поэтому думаю он отключен