Symfony - twig - автозагрузчик ожидаемого класса - PullRequest
0 голосов
/ 15 сентября 2018

У меня проблема с symfony и, видимо, веткой. Я работал над проектом в течение некоторого времени, и когда я собирался сделать новый релиз (загрузив все через ftp, следуя этому: https://medium.com/@runawaycoin/deploying-symfony-4-application-to-shared-hosting-with-just-ftp-access-e65d2c5e0e3d).

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

Затем я включаю отладку и получаю ошибку:

The autoloader expected class "Twig\Extension\AbstractExtension" to be defined in file ".../symfony/vendor/composer/../twig/twig/src/Extension/AbstractExtension.php". The file was found but the class was not in it, the class name or namespace probably has a typo.

Я перепробовал все, что смог найти в Интернете, но единственный, у кого была похожая проблема, решил ее, добавив веточку / расширения, но это тоже не решило.

Я совсем не понимаю, что могло произойти, но эта проблема, казалось, появилась без причины и без каких-либо изменений в файле.

Приложение раньше работало и все еще работает в автономном режиме.

Вот код AbstractExtension.php, который такой же, как и в репо twigphp / twig:

<?php

namespace Twig\Extension;

class_exists('Twig_Extension');

if (\false) {
    class AbstractExtension extends \Twig_Extension
    {
    }
}

PS: это если ложные звуки странные, но такие же, как в Интернете, поэтому я не понимаю

РЕДАКТИРОВАТЬ: вот журнал как текст:

(1/1) RuntimeException
The autoloader expected class "Twig\Extension\AbstractExtension" to be defined in file "/home/homeviewcx/symfony/vendor/composer/../twig/twig/src/Extension/AbstractExtension.php". The file was found but the class was not in it, the class name or namespace probably has a typo.

in DebugClassLoader.php line 288
at DebugClassLoader->checkClass('Twig\\Extension\\AbstractExtension', '/home/homeviewcx/symfony/vendor/composer/../twig/twig/src/Extension/AbstractExtension.php')
in DebugClassLoader.php line 159
at DebugClassLoader->loadClass('Twig\\Extension\\AbstractExtension')
at spl_autoload_call('Twig\\Extension\\AbstractExtension')
in CsrfExtension.php line 21
at require('/home/homeviewcx/symfony/vendor/symfony/twig-bridge/Extension/CsrfExtension.php')
in DebugClassLoader.php line 145
at DebugClassLoader->loadClass('Symfony\\Bridge\\Twig\\Extension\\CsrfExtension')
at spl_autoload_call('Symfony\\Bridge\\Twig\\Extension\\CsrfExtension')
at class_exists('Symfony\\Bridge\\Twig\\Extension\\CsrfExtension')
in FrameworkExtension.php line 1240
at FrameworkExtension->registerSecurityCsrfConfiguration(array('enabled' => true), object(MergeExtensionConfigurationContainerBuilder), object(XmlFileLoader))
in FrameworkExtension.php line 205
at FrameworkExtension->load(array(array('router' => array('resource' => 'kernel::loadRoutes', 'type' => 'service')), array('secret' => 'env_d3d895c31330f4ea_APP_SECRET_dd4bd60cef72a43e4dea38ee2ba60137', 'session' => array('handler_id' => null), 'php_errors' => array('log' => true), 'cache' => null), array('router' => array('strict_requirements' => null)), array('default_locale' => 'en', 'translator' => array('paths' => array('/home/homeviewcx/symfony/translations'), 'fallbacks' => array('en'))), array('validation' => array('email_validation_mode' => 'html5')), array('cache' => array('pools' => array('doctrine.result_cache_pool' => array('adapter' => 'cache.app'), 'doctrine.system_cache_pool' => array('adapter' => 'cache.system'))))), object(MergeExtensionConfigurationContainerBuilder))
in MergeExtensionConfigurationPass.php line 76
at MergeExtensionConfigurationPass->process(object(ContainerBuilder))
in MergeExtensionConfigurationPass.php line 39
at MergeExtensionConfigurationPass->process(object(ContainerBuilder))
in Compiler.php line 95
at Compiler->compile(object(ContainerBuilder))
in ContainerBuilder.php line 746
at ContainerBuilder->compile()
in Kernel.php line 519
at Kernel->initializeContainer()
in Kernel.php line 123
at Kernel->boot()
in Kernel.php line 183
at Kernel->handle(object(Request))
in app.php line 50

вот мой composer.json:

    {
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.1.3",
        "ext-iconv": "*",
        "sensio/framework-extra-bundle": "^5.1",
        "symfony/apache-pack": "^1.0",
        "symfony/asset": "^4.1",
        "symfony/config": "^4.1",
        "symfony/console": "^4.1",
        "symfony/dependency-injection": "^4.1",
        "symfony/expression-language": "^4.1",
        "symfony/flex": "^1.0",
        "symfony/form": "^4.1",
        "symfony/framework-bundle": "^4.1",
        "symfony/lts": "^4@dev",
        "symfony/monolog-bundle": "^3.1",
        "symfony/orm-pack": "*",
        "symfony/process": "^4.1",
        "symfony/security-bundle": "^4.1",
        "symfony/serializer-pack": "*",
        "symfony/swiftmailer-bundle": "^3.1",
        "symfony/twig-bundle": "^4.1",
        "symfony/validator": "^4.1",
        "symfony/web-link": "^4.1",
        "symfony/yaml": "^4.1"
    },
    "require-dev": {
        "symfony/debug-pack": "*",
        "symfony/dotenv": "^4.1",
        "symfony/maker-bundle": "^1.0",
        "symfony/profiler-pack": "*",
        "symfony/test-pack": "^1.0",
        "symfony/web-server-bundle": "^4.1"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ],
        "prod": [
          "SET APP_ENV=prod",
          "composer install --no-dev --optimize-autoloader",
          "composer dump-autoload --optimize --no-dev --classmap-authoritative"
        ],
        "dev": [
          "SET APP_ENV=dev",
          "composer install"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false
        }
    }
}

PS: Лично я нигде не расширяю класс AbstractExtension (как и любые другие классы веток) и не затрагивал компилятор контейнера (здесь все еще относительно новый), но да, это может быть

1 Ответ

0 голосов
/ 22 сентября 2018

Глядя на коммит, вызвавший ошибку, здесь:

https://github.com/twigphp/Twig/commit/2c174e4015dcfdcb4f39d004e3b1aeccae77aa25#diff-d2944cb9ff29770359c04590530f931aL5

Единственное изменение - это способ загрузки класса, так как class_exists('Twig_Extension') вызовет __autoload() таким образом, ожидается, что класс будет уже вызван на этом этапе.

Похоже, вы уже обновили свои зависимости, но очистили ли вы кеш?Так как проблема не доступна локально (отлично работает на dev), проблема только на вашем сервере (приложение работает в режиме prod), symfony все еще использует старый кеш, который объясняет ошибку.

Если это так, вам нужно обновить кеш на вашем сервере, выполнив:

php bin/console cache:clear --no-warmup --env=prod

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...