Composer未在vendor/bin目录生成doctrine-migrations PHP文件问题求助
问题排查与解决方案
排查步骤
- 检查composer install执行参数:如果线上部署执行的是
composer install --no-dev,且doctrine/migrations依赖被放在了require-dev分组下,会导致依赖安装不完整,仅生成部分入口文件缺失核心执行文件。 - 检查执行权限:线上部署阶段执行composer的用户如果对vendor目录没有写入权限,会导致二进制代理文件生成失败,仅生成入口文件而缺失对应的php执行文件,可在构建日志中搜索
permission denied相关报错确认。 - 检查Composer版本差异:本地Docker环境和线上服务器的Composer大版本不一致时,二进制文件生成逻辑存在差异,Doctrine Migrations的旧版本对Composer 1.x和2.x的适配逻辑不同,会出现单边生成文件缺失的问题。
- 检查composer.json配置:确认项目根目录composer.json中是否配置了自定义
bin-dir路径、vendor-bin相关规则,部分老旧项目会手动修改bin目录生成位置,导致文件生成到非预期路径。 - 检查部署清理逻辑:AWS EB的部署脚本通常会在composer install完成后执行冗余文件清理,可能误删了
doctrine-migrations.php这类文件,可检查.ebignore规则或者部署钩子中的清理脚本。
解决方案
临时修复
直接将本地环境正常生成的doctrine-migrations.php文件上传到线上vendor/bin目录,设置权限和同目录其他可执行文件一致,即可临时恢复迁移功能。
永久修复
- 统一本地和线上的Composer版本,推荐使用兼容老旧项目的Composer 2.2.x LTS版本,避免版本差异导致的生成逻辑不一致问题。
- 在composer.json的
config节点显式指定bin目录路径:
{ "config": { "bin-dir": "vendor/bin" } }
- 调整部署执行的composer install参数,移除不必要的
--no-dev参数(如果migrations需要在线上环境执行),或者将doctrine/migrations移到require分组下。 - 清理部署脚本中误删php文件的规则,AWS EB环境可额外在部署后置钩子中增加补全文件的逻辑,避免清理导致的文件缺失。
验证方法
执行命令php vendor/bin/doctrine-migrations status,如果返回正常的迁移状态列表即表示修复完成。
内容的提问来源于stack exchange,提问作者Nicko Brooko
相关产品推荐
相关产品推荐

