У нас есть веб-приложение Symfony 4.3, размещенное на Heroku. Это новая настройка, и нам никогда не удавалось заставить режим dev работать правильно . В сети существует множество подобных проблем, но ни одна из них не устраняет точные симптомы, с которыми мы здесь сталкиваемся.
Проект был создан с помощью командной строки:
composer create-project symfony/website-skeleton appName
Позвольте мне уточнить, что: мы не хотим изменить с"dev" на"prod"
Нам нужно иметь возможность использовать приложение в режиме разработки, чтобыВоспользуйтесь преимуществами отладки ошибок для PHP согласно статье «Как настроить страницы ошибок» для Symfony 4.3 здесь
$ php bin/console about
-------------------- ----------------------------------------------------
Symfony
-------------------- ----------------------------------------------------
Version 4.3.5
End of maintenance 01/2020
End of life 07/2020
-------------------- ----------------------------------------------------
Kernel
-------------------- ----------------------------------------------------
Type App\Kernel
Environment dev
Debug true
Charset UTF-8
Cache directory ./var/cache/dev (12.1 MiB)
Log directory ./var/log (13 KiB)
-------------------- ----------------------------------------------------
PHP
-------------------- ----------------------------------------------------
Version 7.3.10
Architecture 64 bits
Intl locale n/a
Timezone Europe/Berlin (2019-10-28T15:48:05+01:00)
OPcache false
APCu false
Xdebug false
-------------------- ----------------------------------------------------
Environment (.env)
-------------------- ----------------------------------------------------
APP_ENV dev
*just a few removed before posting for privacy*
-------------------- ----------------------------------------------------
Если мы перейдем из среды 'dev' в среду 'prod',Приложение работает, но мы не можем видеть ошибки так, как мы хотим. Мы могли бы использовать команду ниже (но это не та проблема, которую мы здесь пытаемся решить), чтобы использовать «Сервер Symfony Var Dumper». Мы не хотим использовать этот метод.
./bin/console server:dump
Возможно, нам не хватает зависимости, но composer update
, composer install
и composer dump-autoload
ничего не решают.
Также обратите внимание на сообщение « Вы забыли оператор« использование »для другого пространства имен?» В /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/src/Kernel.php:23 «Возможно ли, что WebProfilerBundle не работает в главном репозитории?
Чтобы лучше понять ситуацию, ниже приведен файл composer.json
{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"phpmailer/phpmailer": "^6.1",
"sensio/framework-extra-bundle": "^5.5",
"symfony/asset": "4.3.*",
"symfony/console": "4.3.*",
"symfony/dotenv": "4.3.*",
"symfony/expression-language": "4.3.*",
"symfony/flex": "^1.3.1",
"symfony/form": "4.3.*",
"symfony/framework-bundle": "4.3.*",
"symfony/http-client": "4.3.*",
"symfony/intl": "4.3.*",
"symfony/mailer": "4.3.*",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "^1.0",
"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/twig-pack": "^1.0",
"symfony/validator": "4.3.*",
"symfony/web-link": "4.3.*",
"symfony/webpack-encore-bundle": "^1.7",
"symfony/yaml": "4.3.*"
},
"require-dev": {
"symfony/debug-bundle": "4.3.*",
"symfony/debug-pack": "*",
"symfony/maker-bundle": "^1.14",
"symfony/profiler-pack": "^1.0",
"symfony/test-pack": "*",
"symfony/web-profiler-bundle": "4.3.*",
"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.*"
}
}
}
Наше препятствие: попытка развертывания на героку в режиме dev
.
git push heroku master
, который завершается ошибкой со следующим сообщением:
remote: Executing script cache:clear [KO]
remote: [KO]
remote: Script cache:clear returned with error code 255
remote: !! PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "WebProfilerBundle" from namespace "Symfony\Bundle\WebProfilerBundle".
remote: !! Did you forget a "use" statement for another namespace? in /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/src/Kernel.php:23
remote: !! Stack trace:
remote: !! #0 /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/vendor/symfony/http-kernel/Kernel.php(429): App\Kernel->registerBundles()
remote: !! #1 /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/vendor/symfony/http-kernel/Kernel.php(130): Symfony\Component\HttpKernel\Kernel->initializeBundles()
remote: !! #2 /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/vendor/symfony/framework-bundle/Console/Application.php(159): Symfony\Component\HttpKernel\Kernel->boot()
remote: !! #3 /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/vendor/symfony/framework-bundle/Console/Application.php(65): Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands()
remote: !! #4 /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/vendor/symfony/console/Application.php(149): Symfony\Bundle\FrameworkBundle\Cons in /tmp/build_a45354eb0ee7b20dd7ec870ed4fb1980/src/Kernel.php
on line 23
remote: !!
remote: Script @auto-scripts was called via post-install-cmd
remote: ! WARNING: There was a class not found error in your code
remote:
remote: ! ERROR: Dependency installation failed!
remote: !
remote: ! The 'composer install' process failed with an error. The cause
remote: ! may be the download or installation of packages, or a pre- or
remote: ! post-install hook (e.g. a 'post-install-cmd' item in 'scripts')
remote: ! in your 'composer.json'.
remote: !
remote: ! Typical error cases are out-of-date or missing parts of code,
remote: ! timeouts when making external connections, or memory limits.
remote: !
remote: ! Check the above error output closely to determine the cause of
remote: ! the problem, ensure the code you're pushing is functioning
remote: ! properly, and that all local changes are committed correctly.
remote: !
remote: ! For more information on builds for PHP on Heroku, refer to
remote: ! https://devcenter.heroku.com/articles/php-support
remote: !
remote: ! REMINDER: the following warnings were emitted during the build;
remote: ! check the details above, as they may be related to this error:
remote: ! - There was a class not found error in your code
remote:
remote: ! Push rejected, failed to compile PHP app.
remote:
remote: ! Push failed
В настоящее время мы не знаем, как установить или проверить, что пакеты действительно присутствуют и работают в Symfony 4.3 - идеи в этом направлении могут помочь, но не только.
php bin/console config:dump-reference
Available registered bundles with their extension alias if available
====================================================================
---------------------------- ------------------------
Bundle name Extension alias
---------------------------- ------------------------
DebugBundle debug
DoctrineBundle doctrine
DoctrineCacheBundle doctrine_cache
DoctrineMigrationsBundle doctrine_migrations
FrameworkBundle framework
MakerBundle maker
MonologBundle monolog
SecurityBundle security
SensioFrameworkExtraBundle sensio_framework_extra
SwiftmailerBundle swiftmailer
TwigBundle twig
TwigExtraBundle twig_extra
WebProfilerBundle web_profiler
WebServerBundle web_server
WebpackEncoreBundle webpack_encore
---------------------------- ------------------------
// Provide the name of a bundle as the first argument of this command to dump its default configuration. (e.g.
// config:dump-reference FrameworkBundle)
//
// For dumping a specific option, add its path as the second argument of this command. (e.g.
// config:dump-reference FrameworkBundle profiler.matcher to dump the
// framework.profiler.matcher configuration)