AWS Elastic Beanstalk部署Laravel时MongoDB扩展与Composer更新报错
问题原因
- 扩展配置名称不匹配:通过pecl安装的是官方维护的新版MongoDB PHP驱动,生成的扩展文件名为
mongodb.so,但你在/etc/php.d/99mongo.ini中配置加载的是mongo.so,二者名称不一致导致PHP无法找到扩展文件。只有早已废弃的老版本Mongo驱动才使用mongo.so作为文件名。 - PECL安装命令执行失败:日志显示第二次构建时pecl安装命令报错,原因是环境中已安装过同版本扩展时,pecl默认会弹出交互式确认提示,非交互的部署环境无法响应提示就会执行终止,你之前设置了
ignoreErrors: true,安装失败仍继续构建,自然会触发后续找不到扩展的报错。 - 可能存在版本兼容性问题:如果你的Elastic Beanstalk环境使用PHP 8.x版本,低于1.13.0的mongodb扩展版本不支持PHP 8,指定安装
mongodb-1.10也会导致安装失败。
修复方案
直接替换你的01_install_mongo.config文件内容为以下配置即可:
packages: rpm: php-pear: [] php-devel: [] gcc: [] make: [] files: "/etc/php.d/99mongodb.ini": mode: "000644" owner: root group: root content: | extension=mongodb.so commands: install_mongo_driver_command: command: yes '' | sudo pecl install -f mongodb ignoreErrors: false
配置说明
- 修正了ini文件中加载的扩展名为正确的
mongodb.so,同时将ini文件权限调整为合理的644(扩展配置文件不需要执行权限) - 给pecl安装命令增加
yes '' |前缀自动应答所有交互提示,加上-f参数强制安装,避免重复安装时的报错 - 移除了不合理的
ignoreErrors: true配置,确保扩展安装失败时直接终止构建,方便排查问题 - 新增
make依赖安装,部分环境编译扩展需要用到make工具
如果确实需要安装指定版本的扩展,将安装命令改为yes '' | sudo pecl install -f mongodb-1.10即可,需要提前确认该版本兼容你环境中的PHP版本。
内容的提问来源于stack exchange,提问作者codeX
相关产品推荐
相关产品推荐

