Symfony 5.3中的MIME标头格式错误

1l5u6lss  于 2022-11-16  发布在  其他
关注(0)|答案(4)|浏览(176)

我正在用Symfony 5.3和PHP8.0.12做一个项目。我一直在自己的电脑上开发它,它运行得很好。现在我想把它部署在一个远程容器上。
然而,当我启动内置于Web服务器的Symfony时,在访问任何定义的路由时,我会收到以下错误:

issue with server callback error="unable to fetch the response from the backend: malformed MIME header: missing colon: "FROM information_schema.schemata""

在这两种情况下(在我的计算机上和在容器中),服务器都连接到远程PostgreSQL数据库。容器连接到数据库似乎没有任何问题,因为我可以使用psql命令手动连接。
我试过重新安装Symfony(Symfony CLI版本v4.26.8)、Composer(版本2.1.12)和大多数PHP库,但没有任何改变。
我不知道问题出在哪里。如果能提供帮助,我将不胜感激。
下面是我的 composer .json:

{
"type": "project",
"license": "proprietary",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
    "php": ">=7.2.5",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "ext-json": "*",
    "composer/package-versions-deprecated": "1.11.99.2",
    "doctrine/annotations": "^1.13",
    "doctrine/doctrine-bundle": "^2.4",
    "doctrine/doctrine-migrations-bundle": "^3.1",
    "doctrine/orm": "^2.9",
    "lexik/jwt-authentication-bundle": "^2.13",
    "sensio/framework-extra-bundle": "^6.2",
    "symfony/apache-pack": "^1.0",
    "symfony/dotenv": "5.3.*",
    "symfony/flex": "^1.15",
    "symfony/framework-bundle": "5.3.*",
    "symfony/http-foundation": "5.3.*",
    "symfony/ldap": "5.3.*",
    "symfony/proxy-manager-bridge": "5.3.*",
    "symfony/security-bundle": "5.3.*",
    "symfony/stopwatch": "5.3.*",
    "symfony/web-profiler-bundle": "5.3.*",
    "symfony/property-access": "5.3.*",
    "symfony/runtime": "5.3.*",
    "symfony/security-csrf": "5.3.*",
    "symfony/serializer": "5.3.*",
    "symfony/yaml": "5.3.*"
},
"config": {
    "optimize-autoloader": true,
    "preferred-install": {
        "*": "dist"
    },
    "sort-packages": true
},
"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\\Tests\\": "tests/"
    }
},
"replace": {
    "symfony/polyfill-ctype": "*",
    "symfony/polyfill-iconv": "*",
    "symfony/polyfill-php72": "*"
},
"scripts": {
    "auto-scripts": {
        "cache:clear": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    },
    "post-install-cmd": [
        "@auto-scripts"
    ],
    "post-update-cmd": [
        "@auto-scripts"
    ]
},
"conflict": {
    "symfony/symfony": "*"
},
"extra": {
    "symfony": {
        "allow-contrib": false,
        "require": "5.3.*"
    }
},
"require-dev": {
    "symfony/maker-bundle": "^1.33"
}
}
tquggr8v

tquggr8v1#

我在php-alpine容器中使用symfony server:start和docker时遇到过这个错误。每次我在新安装的示例中运行migrations或doctrine:schema:update时,我的symfony本地web服务器都会抛出错误:issue with server callback error="unable to fetch the response from the backend: malformed MIME header: missing colon: "FROM information_schema.schemata我通过删除alpine容器并从FROM ubuntu:20.04图像构建所有内容来解决这个问题:我不得不安装php,驱动程序和所有的依赖项。这并不适合我的生产环境,因为映像超过1GB,这意味着它有我在生产中不需要的二进制文件。根据经验,symfony本地网络服务器需要一个python环境,但我不确定。
几天后,我偶然发现了这个git仓库:https://github.com/dunglas/symfony-docker。Symfony文档中建议使用的文件,网址为:Using Docker with Symfony。它使用caddy作为web服务器。我从它那里学到了东西,调整以适应我的需要,从那时起就再也没有使用symfony本地web服务器。这是一个很好的项目,值得表扬Kévin Dunglas和维护者。php映像大约是200 MB。Caddy也是大约40 MB。对于生产和开发环境都很好。
请仔细阅读回购协议,并采取你能或一切。

**免责声明:**这不是对您的问题/错误的回答,而是一个简单的替代方案。

piwo6bdm

piwo6bdm2#

我在运行docker(ubuntu)时也遇到过同样的问题。虽然我不完全确定为什么会发生这种情况,但我设法找到了一个简单的解决方法:

composer install 
composer run-script auto-scripts
symfony proxy:start --host=0.0.0.0 
symfony local:server:start --no-tls --port=8000

不知道为什么会这样,但是当你在Docker中运行它的时候,一切都很好,你可以在CONTAINER_IP:8000打开你的应用程序。
我决定把这个贴在这里,因为我花了3个小时才弄明白,所以希望这能节省一些人的时间。

qybjjes1

qybjjes13#

我的快速解决方案是从文件中的查询中删除新行:vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php方法:getListTableMetadataSQL

return sprintf(
            <<<'SQL'
SELECT ENGINE, AUTO_INCREMENT, TABLE_COLLATION, TABLE_COMMENT, CREATE_OPTIONS
FROM information_schema.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = %s AND TABLE_NAME = %s
SQL

至:

return sprintf(
            <<<'SQL'
SELECT ENGINE, AUTO_INCREMENT, TABLE_COLLATION, TABLE_COMMENT, CREATE_OPTIONS FROM information_schema.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = %s AND TABLE_NAME = %s
SQL

当然,它在composer安装后返回,但这显示了问题的根源
BeforeAfter显示器

uqzxnwby

uqzxnwby4#

对我来说-这是“var”目录的权限问题。也在Docker中。

NOTICE: PHP message: PHP Fatal error:  Uncaught RuntimeException: Unable to create the "logs" directory (/app/var/log). in /app/vendor/symfony/http-kernel/Kernel.php:626

使目录可写解决了此问题。

相关问题