在服务器上执行依赖安装,装到一半报内存耗尽,进程被直接中断,本机开发环境跑同样的命令却完全正常,差别就在机器规格上。
真正麻烦的地方在于,几个原因的现象几乎一样。服务器没有开启交换分区;依赖解析阶段需要的内存超出限制;同时开了多个任务抢占内存。
临时放开内存限制执行
php -d memory_limit=-1 /usr/local/bin/composer install
更新再安装减少解析量
composer update --no-dev --prefer-dist
接着确认交换分区情况
free -h
生产环境只装锁定版本
composer install --no-dev --classmap-authoritative
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
中途换过一次思路,把范围缩到最小的那一层,反而快了。
别只看报错消失,验证要多做一步。依赖安装完整结束,自动加载文件生成正常,站点启动无报错。
在生产机上跑更新会改变依赖版本,风险很高;部署应该用锁文件安装,把依赖解析留在构建阶段完成。报错文案容易误导,真正的原因往往在相邻那一层的日志里。