无法将Symfony演示应用部署至Google App Engine求助
Symfony应用部署Google App Engine失败排查
我已完成Symfony演示应用的创建,本地运行正常,但执行gcloud app deploy命令部署时出现错误,部署失败。
错误日志
File upload done. Updating service [default]...failed. ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 8c83ab19-e20d-4d11-9ec0-734a47b3e80c status: FAILURE ...ress the notice in phar:///layers/google.php.composer-install/composer/bin/composer/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php:71 Deprecation Notice: Return type of Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator::getChildren() should either be compatible with RecursiveIterator::getChildren(): ?RecursiveIterator, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///layers/google.php.composer-install/composer/bin/composer/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php:76 Deprecation Notice: Return type of Symfony\Component\Finder\Iterator\FilterIterator::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///layers/google.php.composer-install/composer/bin/composer/vendor/symfony/finder/Iterator/FilterIterator.php:30 Deprecation Notice: Return type of Symfony\Component\Finder\Iterator\PathFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in phar:///layers/google.php.composer-install/composer/bin/composer/vendor/symfony/finder/Iterator/PathFilterIterator.php:27 80 packages you are using are looking for funding. Use the `composer fund` command to find out more! Run composer recipes at any time to see the status of your Symfony recipes. Executing script cache:clear [KO] [KO] Script cache:clear returned with error code 255 !! Symfony\Component\ErrorHandler\Error\ClassNotFoundError {#70 !! #message: """ !! Attempted to load class "DebugBundle" from namespace "Symfony\Bundle\DebugBundle".\n !! Did you forget a "use" statement for another namespace? !! """ !! #code: 0 !! #file: "./vendor/symfony/framework-bundle/Kernel/MicroKernelTrait.php" !! #line: 135 !! trace: { !! ./vendor/symfony/framework-bundle/Kernel/MicroKernelTrait.php:135 { …} !! ./vendor/symfony/http-kernel/Kernel.php:382 { …} !! ./vendor/symfony/http-kernel/Kernel.php:766 { …} !! ./vendor/symfony/http-kernel/Kernel.php:128 { …} !! ./vendor/symfony/framework-bundle/Console/Application.php:166 { …} !! ./vendor/symfony/framework-bundle/Console/Application.php:72 { …} !! ./vendor/symfony/console/Application.php:171 { …} !! ./vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php:54 { …} !! ./vendor/autoload_runtime.php:29 { …} !! ./bin/console:11 { !! › !! › require_once dirname(__DIR__).'/vendor/autoload_runtime.php'; !! › !! arguments: { !! "/workspace/vendor/autoload_runtime.php" !! } !! } !! } !! } !! 2022-11-01T03:03:46+00:00 [critical] Uncaught Error: Class "Symfony\Bundle\DebugBundle\DebugBundle" not found !!
项目app.yaml配置
runtime: php81 # threadsafe: true handlers: # tell appengine where our static assets live - url: /bundles static_dir: web/bundles # the symfony front controller - url: /.* script: web/app.php # [START env_vars] env_variables: SYMFONY_ENV: prod # [END env_vars]
本地环境
- Mac OSX M1(Apple Silicon)
- PHP 8.1.12
- Symfony CLI version 5.4.17
- Composer version 2.4.4
- Google Cloud SDK 406.0.0
解决步骤
1. 修复DebugBundle加载逻辑
错误核心是生产环境下找不到DebugBundle——这个包默认属于开发依赖(require-dev),生产部署时Composer不会安装它,但你的Kernel可能全局注册了这个Bundle。
打开src/Kernel.php,修改registerBundles方法,仅在调试环境加载DebugBundle:
public function registerBundles(): array { $bundles = [ // 保留所有生产环境需要的Bundle,比如FrameworkBundle、TwigBundle等 new \Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new \Symfony\Bundle\TwigBundle\TwigBundle(), // ... 其他必填Bundle ]; if ($this->isDebug()) { // 仅在调试环境加载开发相关Bundle $bundles[] = new \Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new \Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); // ... 其他开发用Bundle } return $bundles; }
2. 确认Composer生产环境安装参数
Google App Engine部署时默认执行composer install --no-dev --optimize-autoloader,这是生产环境的正确配置,不要修改为--dev(会引入不必要的开发依赖,增加安全风险)。
3. 校正项目目录路径(针对Symfony 5+)
Symfony 5及以上版本的前端控制器默认在public/目录,而非web/。如果你的项目是Symfony 5+,需要修改app.yaml的handlers部分:
handlers: - url: /bundles static_dir: public/bundles - url: /.* script: public/index.php
4. 本地预编译缓存后重新部署
在本地执行以下命令,提前生成生产环境缓存:
php bin/console cache:clear --env=prod composer dump-autoload --optimize
然后重新运行gcloud app deploy。
内容的提问来源于stack exchange,提问作者A. Cedano
相关产品推荐
相关产品推荐

