在服务器上执行依赖安装,装到一半报内存耗尽,进程被直接中断,本机开发环境跑同样的命令却完全正常,差别就在机器规格上。

真正麻烦的地方在于,几个原因的现象几乎一样。服务器没有开启交换分区;依赖解析阶段需要的内存超出限制;同时开了多个任务抢占内存。

临时放开内存限制执行

php -d memory_limit=-1 /usr/local/bin/composer install

更新再安装减少解析量

composer update --no-dev --prefer-dist

接着确认交换分区情况

free -h

生产环境只装锁定版本

composer install --no-dev --classmap-authoritative

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

中途换过一次思路,把范围缩到最小的那一层,反而快了。

别只看报错消失,验证要多做一步。依赖安装完整结束,自动加载文件生成正常,站点启动无报错。

在生产机上跑更新会改变依赖版本,风险很高;部署应该用锁文件安装,把依赖解析留在构建阶段完成。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189