Ошибка с функцией unlink() Symfony в prod

У меня проблема с моим приложением Он развернут с помощью 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. Я ожидал такой же ошибки в разработке и пришел к выводу, что некоторые библиотеки не обновлены. Но в разработке у меня никогда не было такой ошибки Я не понимаю, почему

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ошибка указывает на то, что проблема связана с профилировщиком. В производстве его обычно следует отключить.

Какую команду композитора вы использовали при установке пакетов?

Каково значение вашего APP_ENV в вашем файле .env?

У меня нет доступа к фактической конфигурации продукта, я спрошу своего босса. В gitlab это APP_ENV=dev. Но когда профилировщик активен, мы видим полосу внизу страницы, верно?? У меня его нет в проде, поэтому думаю он отключен

arsene stein 10.06.2024 12:16

Для установки пакетов я использовал установку композитора

arsene stein 10.06.2024 13:07

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

QDA 11.06.2024 13:13

APP_ENV на самом деле был установлен на dev. Спасибо. Установка его на prod решила проблему.

arsene stein 12.06.2024 15:33

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