Heroku运行Lumen-PHP项目artisan命令报错:Class 'Memcached'未找到
解决Heroku上Lumen-PHP项目运行Artisan命令时“Class 'Memcached' not found”的问题
我之前在Heroku部署Lumen项目时也碰到过一模一样的问题,光在composer.json里加ext-memcached依赖确实不够——Heroku的PHP环境默认不会自动安装Memcached扩展的系统依赖,得额外配置几步:
步骤1:确认Composer依赖的正确声明
首先确保你的composer.json里require区块的ext-memcached声明正确,适配你的PHP版本:
"require": { "php": "^8.0", "laravel/lumen-framework": "^9.0", "ext-memcached": "*" }
运行composer update更新依赖,然后把修改后的composer.json和composer.lock提交到Git,重新部署到Heroku:
git add composer.json composer.lock git commit -m "Add memcached extension dependency" git push heroku main
步骤2:安装Memcached的系统依赖
Memcached PHP扩展依赖libmemcached系统库,Heroku默认不会预装这个。你需要添加Heroku的APT buildpack来安装系统包:
- 先添加APT buildpack到你的Heroku项目(要放在PHP buildpack之前):
heroku buildpacks:add --index 1 heroku-community/apt
- 在项目根目录创建一个名为
Aptfile的文件,内容只需要一行:
libmemcached-dev
- 提交这个文件并重新部署:
git add Aptfile git commit -m "Add libmemcached system dependency" git push heroku main
步骤3:验证扩展是否安装成功
部署完成后,登录Heroku的控制台检查Memcached扩展是否生效:
heroku run bash # 进入控制台后运行 php -m | grep memcached
如果输出memcached,说明扩展已经安装成功,此时再运行Artisan命令应该就不会报错了。
备选方案:临时切换缓存驱动(如果不需要Memcached)
如果你暂时不需要用Memcached作为缓存驱动,可以临时修改Lumen的缓存配置来绕过这个问题:
- 打开
bootstrap/app.php,找到缓存配置的部分,把默认驱动改成file或者array:
$app->configure('cache'); // 或者直接设置驱动 $app->instance('config', $app->make('config')->set('cache.default', 'file'));
- 提交修改后重新部署,这样Artisan命令就会使用文件缓存,不会再寻找Memcached类了。
内容的提问来源于stack exchange,提问作者Olaoluwa Faniyi
相关产品推荐
相关产品推荐

