You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku推送PHP应用失败:执行cache:clear --no-warmup遇RuntimeException

解决Heroku部署PHP应用时cache:clear --no-warmup触发的RuntimeException错误

从你贴的部署日志来看,核心错误是PHP Fatal error: Uncaught Error: Call to undefined function Doctrine\Common\Cache\apc_fetch(),这是典型的环境依赖不匹配问题,下面给你拆解原因和解决办法:

错误根源

  • Heroku官方的PHP buildpack默认没有启用APC(或APCu)扩展——这个扩展是Doctrine ApcCache驱动依赖的opcode缓存组件,而你的项目恰好配置了这个缓存驱动。
  • 部署执行cache:clear命令时,Doctrine尝试调用APC相关函数,但Heroku环境里找不到该函数,直接抛出致命错误导致部署失败。

可行的解决办法

1. 切换到Heroku原生支持的缓存驱动(最推荐)

把缓存驱动换成Heroku环境默认支持的类型,比如文件缓存、数组缓存(仅开发用),如果你的项目用到了Heroku Redis插件,也可以用Redis缓存。

以Symfony项目为例,修改生产环境配置文件app/config/config_prod.yml:

# Doctrine ORM缓存配置
doctrine:
    orm:
        metadata_cache_driver:
            type: file
            pool: doctrine.system_cache_pool
        query_cache_driver:
            type: file
            pool: doctrine.system_cache_pool
        result_cache_driver:
            type: file
            pool: doctrine.result_cache_pool

# Symfony框架缓存组件配置(如果用到的话)
framework:
    cache:
        app: cache.adapter.filesystem
        system: cache.adapter.filesystem

修改后提交代码,重新推送部署即可。

2. 在Heroku环境中安装APCu扩展(若必须用APC类缓存)

PHP7及以后版本,APC已经被APCu替代,你可以通过composer.json声明依赖来让Heroku自动安装:

  1. 在composer.json的require区块添加:
"ext-apcu": "*"
  1. 同时确保Doctrine的缓存驱动配置为ApcuCache(对应PHP7+的APCu扩展),而不是旧的ApcCache。
  2. 提交修改后的composer.json和composer.lock,重新推送部署,Heroku会自动安装APCu扩展。

3. 临时修改部署时的缓存清理命令

如果不想改动核心配置,可以调整composer.json中的部署脚本,让缓存清理命令使用无依赖的数组驱动:

"scripts": {
    "post-install-cmd": [
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache --env=prod --no-warmup --cache-driver=array"
    ]
}

这样部署阶段的缓存清理会绕过APC依赖,避免触发错误。

内容的提问来源于stack exchange,提问作者herokuplaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:24:02