composer post-autoload-dump error code 255

背景

最近迁移服务器,内网信息地址进行了更改,由于发布机仅作为拉取代码,打包作用,因此并未在发布机器上对RMQ、以及部分对内服务地址进行解析,导致composer dump-autoload的时候执行超时报错,返回了错误码 255。 composer post-autoload-dump event returned with error code 255

Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255

php_error.log rabbitmq connect error

触发的场景

  1. Laravel的文档所说:Laravel升级版本到6.x-7.x,可能会导致该问题被触发!具体可以看这里

    Laravel 7.x 依赖了 Symfony 5.x 的组件,在升级 Laravel 的时候需要同步升级一下Symfony的组件使用

  2. 单独执行php artisan package:discover --ansi没有问题,但是一旦配合composer执行就触发,排查phperror.log寻找原因

    有一个脚本在析构函数中未经检查就尝试去获取RMQ的链接然后进行资源释放,由于发布机器没有绑定RMQ的内网地址,导致composer autoload的时候(该过程composer会自动的new Class()生成autoload文件,因此触发了析构函数的链接)超时执行失败

综上:

  1. 代码里用了vendor里没有的类,此时可以检查一下执行composerphp版本是否不一致,从而导致加载的类库不同,导致类或函数调用丢失【例如:使用php7.x执行正常,切换至php5.x就不正常】
  2. 查看一下对应时间节点的php_error.log,是否有报错【例如:文件读写权限受限、链接资源超时、扩展没开之类…】

解决步骤

  1. 排除了执行composerphp的版本差异
  2. 排除发布系统执行脚本超时断开链接导致:直接上发布机器跑一次composer命令
  3. 排除php artisan的问题:php artisan package:discover --ansi Rebuild the cached package manifest手动执行一次,重新构建缓存扩展包,正常!
  4. 排除composer版本问题:composer -V 对比了测试环境与发布机的版本,并执行composer selfupdatecomposer升级到相同版本,问题依然存在!
  5. 依次查看了php的日志信息,如:php_error.logphp_slow.log,查看相同时间节点日志信息,最终发现问题!
  6. 解决问题:由于是废弃的脚步任务,直接删除了脚步上线!(断开资源的时候应当对资源进行检查再进行操作!)

总结

  1. composer 在执行 dump-autoload生成classMap文件的时候,会自动的 new class() composer autoload function creatMap()

composer dump-autoload will new Class()

  1. 可以在composer.json文件中配置composer执行钩子事件,如:php artisan package:discover --ansi 会在composer dump-autoload执行后被触发! how to config composer event hook in composer.json

推荐阅读:https://segmentfault.com/a/1190000021476022

转载请声明出处: MinsonLee的博客:https://minsonlee.github.io

扫描下方二维码,关注公众号,接收更多实时内容

新猿呓码

打赏一个呗

取消

感谢客官打赏,您的打赏使我动力十足!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦