php - Symfony 4 不在生产环境中构建 : Attempted to load class "WebProfilerBundle" from namespace

标签 php symfony namespaces production

Symfony 4 确实在开发模式下构建,但在产生错误时不在生产模式下构建:

试图从命名空间加载类“WebProfilerBundle”。

WebProfilerBundle 确实已安装,但仅应在开发环境中使用,不应在生产版本中使用。

我在 Fedora30 上,不涉及容器化。

  • php -v => PHP 7.3.8 (cli)(构建时间:2019 年 7 月 30 日 09:26:16)(NTS)
  • npm -v => 6.9.0
  • yarn -v => 1.17.3
  • composer.phar -V => Composer 版本 1.9.0 2019-08-02 20:55:32
  • symfony -V => Symfony CLI 版本 v4.6.4(2019 年 8 月 13 日星期二 16:14:53 CEST)
  • 弹性

  • 事件文件版本控制让我猜测使用了生产构建链(不存在开发构建):
    $ ls -l public/build
    168 -rw-rw-r-- 1 rob rob 169693 31. Aug 15:39 0.376e4878.js
    184 -rw-rw-r-- 1 rob rob 185359 31. Aug 15:39 0.6ea45216.css
      4 -rw-rw-r-- 1 rob rob    404 31. Aug 15:39 app.00b96fcb.js
      4 -rw-rw-r-- 1 rob rob    213 31. Aug 15:39 app.f7e93431.css
      4 -rw-rw-r-- 1 rob rob    261 31. Aug 15:39 entrypoints.json
      4 drwxrwxr-x 2 rob rob   4096 31. Aug 15:39 fonts
      4 drwxrwxr-x 2 rob rob   4096 31. Aug 15:39 images
      4 -rw-rw-r-- 1 rob rob   1246 31. Aug 15:39 manifest.json
      4 -rw-rw-r-- 1 rob rob   1505 31. Aug 15:39 runtime.3c075ebb.js
    

    捆绑.php
    <?php
    
    return [
        Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
        Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
        Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true],
        Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
        Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
        Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
        Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
        Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
    
        Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
        Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
        Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
    
        Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
        Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true],
        Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
    ];
    

    Composer .json
    {
        "type": "project",
        "license": "proprietary",
        "require": {
            "php": "^7.1.3",
            "ext-ctype": "*",
            "ext-iconv": "*",
            "sensio/framework-extra-bundle": "^5.4",
            "symfony/apache-pack": "^1.0",
            "symfony/asset": "4.3.*",
            "symfony/console": "4.3.*",
            "symfony/dotenv": "4.3.*",
            "symfony/expression-language": "4.3.*",
            "symfony/flex": "^1.4",
            "symfony/form": "4.3.*",
            "symfony/framework-bundle": "4.3.*",
            "symfony/http-client": "4.3.*",
            "symfony/intl": "4.3.*",
            "symfony/monolog-bundle": "^3.4",
            "symfony/orm-pack": "*",
            "symfony/process": "4.3.*",
            "symfony/security-bundle": "4.3.*",
            "symfony/serializer-pack": "*",
            "symfony/swiftmailer-bundle": "^3.1",
            "symfony/translation": "4.3.*",
            "symfony/twig-bundle": "4.3.*",
            "symfony/validator": "4.3.*",
            "symfony/web-link": "4.3.*",
            "symfony/webpack-encore-bundle": "^1.6",
            "symfony/yaml": "4.3.*"
        },
        "require-dev": {
            "symfony/debug-pack": "*",
            "symfony/maker-bundle": "^1.0",
            "symfony/profiler-pack": "*",
            "symfony/test-pack": "*",
            "symfony/web-server-bundle": "4.3.*"
        },
        "config": {
            "preferred-install": {
                "*": "dist"
            },
            "sort-packages": true
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "App\\Tests\\": "tests/"
            }
        },
        "replace": {
            "paragonie/random_compat": "2.*",
            "symfony/polyfill-ctype": "*",
            "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"
            ]
        },
        "conflict": {
            "symfony/symfony": "*"
        },
        "extra": {
            "symfony": {
                "allow-contrib": false,
                "require": "4.3.*"
            }
        }
    }
    
    

    生产构建 正在构建:
  • 做 $ cp .env.local.prod .env.local这包含..
  • 与 .env
  • 相同
  • 除了这条线APP_ENV=prod
  • 除了缺少的 APP_SECRET 行
  • 做 $ rm -rf var/cache; rm -rf vendor
  • 做 $ ../composer.phar install --no-dev --prefer-dist --optimize-autoloader --no-interaction
  • 做 $ yarn build
  • 做 $ rm .env.local完成构建

  • 但这似乎不起作用,它会从上面产生错误。

    开发版本 完成:
  • 做 $ rm .env.local just use .env with APP_SECRET and APP_ENV=dev
  • 做 $ rm -rf var/cache; rm -rf vendor
  • 做 $ ../composer.phar install
  • 做 $ yarn encore dev

  • 网站输出错误
    Attempted to load class "WebProfilerBundle" from namespace "Symfony\Bundle\WebProfilerBundle". Did you forget a "use" statement for another namespace?
    (1/1) ClassNotFoundException
    Attempted to load class "WebProfilerBundle" from namespace "Symfony\Bundle\WebProfilerBundle".
    Did you forget a "use" statement for another namespace?
    
    in Kernel.php line 23
    at Kernel->registerBundles()
    in Kernel.php line 424
    at Kernel->initializeBundles()
    in Kernel.php line 130
    at Kernel->boot()
    in Kernel.php line 193
    at Kernel->handle(object(Request))
    in index.php line 25
    

    构建过程
    Loading composer repositories with package information
    Installing dependencies from lock file
    Package operations: 92 installs, 0 updates, 0 removals
      - Installing ocramius/package-versions (1.5.1): Loading from cache
      - Installing symfony/flex (v1.4.5): Loading from cache
      - Installing doctrine/lexer (1.1.0): Loading from cache
      - Installing doctrine/annotations (v1.7.0): Loading from cache
      - Installing doctrine/reflection (v1.0.0): Loading from cache
      - Installing doctrine/event-manager (v1.0.0): Loading from cache
      - Installing doctrine/collections (v1.6.2): Loading from cache
      - Installing doctrine/cache (v1.8.0): Loading from cache
      - Installing doctrine/persistence (1.1.1): Loading from cache
      - Installing doctrine/inflector (v1.3.0): Loading from cache
      - Installing doctrine/common (v2.10.0): Loading from cache
      - Installing psr/container (1.0.0): Loading from cache
      - Installing symfony/service-contracts (v1.1.5): Loading from cache
      - Installing symfony/polyfill-mbstring (v1.12.0): Loading from cache
      - Installing symfony/doctrine-bridge (v4.3.3): Loading from cache
      - Installing doctrine/doctrine-cache-bundle (1.3.5): Loading from cache
      - Installing doctrine/instantiator (1.2.0): Loading from cache
      - Installing symfony/stopwatch (v4.3.3): Loading from cache
      - Installing symfony/polyfill-php73 (v1.12.0): Loading from cache
      - Installing symfony/console (v4.3.3): Loading from cache
      - Installing zendframework/zend-eventmanager (3.2.1): Loading from cache
      - Installing zendframework/zend-code (3.3.1): Loading from cache
      - Installing ocramius/proxy-manager (2.2.3): Loading from cache
      - Installing doctrine/dbal (v2.9.2): Loading from cache
      - Installing doctrine/migrations (2.1.1): Loading from cache
      - Installing egulias/email-validator (2.1.11): Loading from cache
      - Installing jdorn/sql-formatter (v1.2.17): Loading from cache
      - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
      - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
      - Installing symfony/polyfill-php72 (v1.12.0): Loading from cache
      - Installing symfony/polyfill-intl-idn (v1.12.0): Loading from cache
      - Installing symfony/mime (v4.3.3): Loading from cache
      - Installing symfony/http-foundation (v4.3.3): Loading from cache
      - Installing symfony/event-dispatcher-contracts (v1.1.5): Loading from cache
      - Installing symfony/event-dispatcher (v4.3.3): Loading from cache
      - Installing psr/log (1.1.0): Loading from cache
      - Installing symfony/debug (v4.3.3): Loading from cache
      - Installing symfony/http-kernel (v4.3.3): Loading from cache
      - Installing symfony/routing (v4.3.3): Loading from cache
      - Installing symfony/finder (v4.3.3): Loading from cache
      - Installing symfony/filesystem (v4.3.3): Loading from cache
      - Installing symfony/dependency-injection (v4.3.3): Loading from cache
      - Installing symfony/config (v4.3.3): Loading from cache
      - Installing symfony/var-exporter (v4.3.3): Loading from cache
      - Installing psr/cache (1.0.1): Loading from cache
      - Installing symfony/cache-contracts (v1.1.5): Loading from cache
      - Installing symfony/cache (v4.3.3): Loading from cache
      - Installing symfony/framework-bundle (v4.3.3): Loading from cache
      - Installing sensio/framework-extra-bundle (v5.4.1): Loading from cache
      - Installing symfony/apache-pack (v1.0.1): Loading from cache
      - Installing symfony/dotenv (v4.3.3): Loading from cache
      - Installing symfony/expression-language (v4.3.3): Loading from cache
      - Installing symfony/inflector (v4.3.3): Loading from cache
      - Installing symfony/property-access (v4.3.3): Loading from cache
      - Installing symfony/options-resolver (v4.3.3): Loading from cache
      - Installing symfony/intl (v4.3.3): Loading from cache
      - Installing symfony/polyfill-intl-icu (v1.12.0): Loading from cache
      - Installing symfony/form (v4.3.3): Loading from cache
      - Installing symfony/http-client-contracts (v1.1.5): Loading from cache
      - Installing symfony/http-client (v4.3.3): Loading from cache
      - Installing monolog/monolog (1.24.0): Loading from cache
      - Installing symfony/monolog-bridge (v4.3.3): Loading from cache
      - Installing symfony/monolog-bundle (v3.4.0): Loading from cache
      - Installing doctrine/orm (v2.6.3): Loading from cache
      - Installing doctrine/doctrine-bundle (1.11.2): Loading from cache
      - Installing doctrine/doctrine-migrations-bundle (v2.0.0): Loading from cache
      - Installing symfony/orm-pack (v1.0.6): Loading from cache
      - Installing symfony/process (v4.3.3): Loading from cache
      - Installing symfony/security-core (v4.3.3): Loading from cache
      - Installing symfony/security-http (v4.3.3): Loading from cache
      - Installing symfony/security-guard (v4.3.3): Loading from cache
      - Installing symfony/security-csrf (v4.3.3): Loading from cache
      - Installing symfony/security-bundle (v4.3.3): Loading from cache
      - Installing symfony/serializer (v4.3.3): Loading from cache
      - Installing symfony/property-info (v4.3.3): Loading from cache
      - Installing webmozart/assert (1.5.0): Loading from cache
      - Installing phpdocumentor/reflection-docblock (4.3.1): Loading from cache
      - Installing symfony/serializer-pack (v1.0.2): Loading from cache
      - Installing swiftmailer/swiftmailer (v6.2.1): Loading from cache
      - Installing symfony/swiftmailer-bundle (v3.2.8): Loading from cache
      - Installing symfony/translation-contracts (v1.1.5): Loading from cache
      - Installing symfony/translation (v4.3.3): Loading from cache
      - Installing twig/twig (v2.11.3): Loading from cache
      - Installing symfony/twig-bridge (v4.3.3): Loading from cache
      - Installing symfony/twig-bundle (v4.3.3): Loading from cache
      - Installing symfony/validator (v4.3.3): Loading from cache
      - Installing psr/link (1.0.0): Loading from cache
      - Installing fig/link-util (1.0.0): Loading from cache
      - Installing symfony/web-link (v4.3.3): Loading from cache
      - Installing symfony/asset (v4.3.3): Loading from cache
      - Installing symfony/webpack-encore-bundle (v1.6.2): Loading from cache
      - Installing symfony/yaml (v4.3.3): Loading from cache
    Generating optimized autoload files
    ocramius/package-versions: Generating version class...
    ocramius/package-versions: ...done generating version class
    Executing script cache:clear [OK]
    Executing script assets:install public [OK]
    
    yarn run v1.17.3
    $ encore production --progress
    Running webpack ...
    
    98% after emitting SizeLimitsPlugin DONE  Compiled successfully in 5450ms                                                                                                                                                            1:09:20 PM
    
     I  18 files written to public/build
    Entrypoint app [big] = runtime.3c075ebb.js 0.6ea45216.css 0.376e4878.js app.f7e93431.css app.00b96fcb.js
    Entrypoint _tmp_copy = runtime.3c075ebb.js
    Done in 7.52s.
    

    我想知道的是,也许它有帮助,在 public/index.php 中也是调试“命令”:
    use App\Kernel;
    use Symfony\Component\Debug\Debug;
    use Symfony\Component\HttpFoundation\Request;
    
    require dirname(__DIR__).'/config/bootstrap.php';
    
    if ($_SERVER['APP_DEBUG']) {
        umask(0000);
    
        Debug::enable();
    }
    
    if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) {
        Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
    }
    
    if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) {
        Request::setTrustedHosts([$trustedHosts]);
    }
    
    $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
    $request = Request::createFromGlobals();
    $response = $kernel->handle($request);
    $response->send();
    $kernel->terminate($request, $response);
    

    最佳答案

    非常感谢@msg 解决了这个问题。我的期望是环境变量只对创建构建很重要,并且它们在某种程度上是静态的。但正如已经解释过的 here ,环境变量在运行时也很重要。所以因为我在build后删除了我的.env.local,运行时环境立即改回dev。

    关于php - Symfony 4 不在生产环境中构建 : Attempted to load class "WebProfilerBundle" from namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57710023/

    相关文章:

    php - Laravel blade 和@escape 作为文本

    php检测/获取发布请求的发件人url(或服务器)

    php - 从其他表添加数据到表单+ Symfony2

    c++ - 如何找到声明命名空间变量的文件?

    function - 在多个命名空间中使用记录

    php - 使用 Symfony Process 运行后台任务,无需等待进程完成

    php - 为什么我的 php 重定向不起作用?

    Phpunit 断言两个数组是否相等

    symfony - 正在尝试配置无法配置的方法 "first",因为它不存在、未指定、是最终的或静态的

    c# - Windows Phone 8 中的 HttpUtility.ParseQueryString 和 NameValueCollection