'Symfony 4 do not build in Production: Attempted to load class "WebProfilerBundle" from namespace

Symfony 4 do build in Dev mode but do not in Production mode while producing the error:

Attempted to load class "WebProfilerBundle" from namespace.

The WebProfilerBundle sure, is installed but should only used in Dev environment and should not used on Production builds.

I am on Fedora30, no containerization involved.

  • php -v => PHP 7.3.8 (cli) (built: Jul 30 2019 09:26:16) ( NTS )
  • npm -v => 6.9.0
  • yarn -v => 1.17.3
  • composer.phar -V => Composer version 1.9.0 2019-08-02 20:55:32
  • symfony -V => Symfony CLI version v4.6.4 (Tue Aug 13 16:14:53 CEST 2019)
  • flex

Active file versioning let me guess Production build chain is used (not present Dev builds):

$ 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

bundles.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.*"
        }
    }
}

Production builds are build with:

  • do $ cp .env.local.prod .env.local this contains..
    • the same as .env
    • except this line APP_ENV=prod
    • except the missing APP_SECRET line
  • do $ rm -rf var/cache; rm -rf vendor
  • do $ ../composer.phar install --no-dev --prefer-dist --optimize-autoloader --no-interaction
  • do $ yarn build
  • do $ rm .env.local on finish the build

But this seems not work, it produces the error from above.

Dev builds are done with:

  • do $ rm .env.local just use .env with APP_SECRET and APP_ENV=dev
  • do $ rm -rf var/cache; rm -rf vendor
  • do $ ../composer.phar install
  • do $ yarn encore dev

Error output from website

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

Build process

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.

What i'am wondering about is and maybe its a help, in public/index.php are also debug "commands":

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);


Solution 1:[1]

Many thanks to @msg for solving this problem. My expectation was that the environment variable is only important for creating the builds and that they are somehow static. But as already explained here, the environment variable is also important at runtime. So because I deleted my .env.local after build, the runtime environment was immediately changed back to dev.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 row