prod 中 symfony 的 unlink() 函数出现错误

问题描述 投票:0回答:1

我的应用程序有问题 它在后端使用 symfony 6.3.2 部署,我认为它是在带有 docker 的 nginx 服务器上 api使用的库是api-platform

每当我调用 BASE_URL/api/currencies 等 API 时 十次中有 1-2 次我有错误 这是痕迹的一部分

{
    {
    "@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(改进)中读到的内容来看,他们引入了一项功能,可以在一段时间后自动删除配置文件。实际上,对于每个请求,Symfony 有 10% 的随机机会激活删除功能。激活后,两天前或更早创建的任何配置文件都将被删除。 这肯定解释了为什么有时我的请求失败,有时它们工作,这肯定是尝试使用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": []
        },
                ...

任何帮助将不胜感激 谢谢

我试图做的是在开发模式下在本地克隆后端,并使用与 prod 中相同的 php、symfony 以及 Composer 安装的所有软件包的确切版本 我预计在开发中也会出现同样的错误,并得出结论认为某些库不是最新的 但在开发中我从来没有遇到过这个错误 我不明白为什么

php symfony nginx get api-platform.com
1个回答
0
投票

该错误表明问题出在探查器上。在生产中,通常应该禁用它。

您在生产中使用哪个 Composer 命令来安装软件包?

.env 文件中 APP_ENV 的值是多少?

© www.soinside.com 2019 - 2024. All rights reserved.