Composer Satis构建时无法更新包的问题求助
我来帮你排查这个问题,这种情况我在维护私有Composer仓库时遇到过好几次,大概率是缓存没清干净或者Satis的元数据生成不到位导致的,咱们一步步来解决:
你说安装包的服务器上没拿到新包,首先要考虑Composer的本地缓存——它会把仓库的元数据存在本地,哪怕Satis已经更新了,服务器还抱着旧缓存不肯放。直接执行这条命令清缓存:
composer clear-cache
清完之后,试试指定新版本安装(比如新标签是v1.2.0):
composer require your/vendor/package:^1.2.0
或者直接更新:
composer update your/vendor/package
你说Satis“似乎获取到新包”,别光靠感觉,直接去Satis的web目录里查具体文件:
找到对应包的元数据文件,比如/path/to/satis/web/packages/your/vendor/package.json,打开看看里面有没有新标签对应的版本条目。如果没有,说明Satis更新时没抓到新标签,这时候重新运行Satis的build命令,一定要加--no-cache跳过它自己的缓存:
php satis/bin/satis build satis.json /path/to/satis/web --no-cache
另外,检查你的satis.json配置,对应Git仓库有没有开启抓取标签的选项,要是没开,Satis根本不会理新标签:
{ "repositories": [ { "type": "vcs", "url": "git@your-git-repo.com:your/vendor/package.git", "options": { "tags": true } } ] }
composer search出现两个同名包的问题 这个情况要么是Composer缓存了旧的仓库索引,要么是Satis的根packages.json里有重复的包条目。先执行第一步的清缓存命令,要是还存在,就去Satis web目录的根packages.json里搜你的包名,看看是不是不小心在satis.json里加了两次同一个Git仓库?如果是,删掉重复的配置,重新build Satis就行。
要是你的包名和Packagist上的包重名了,Composer会从多个源拉取,自然会出现两个同名包。这时候要在安装服务器的composer.json里指定你的包只能从Satis仓库获取,甚至可以禁用Packagist:
{ "repositories": [ { "type": "composer", "url": "https://your-satis-domain.com" }, { "packagist": false } ], "require": { "your/vendor/package": "*" } }
按这个顺序排查下来,基本能解决绝大多数Satis更新不同步的问题。如果还是不行,看看Satis执行build命令时有没有报错——比如Git权限不够拉取不到新标签,或者网络问题导致Satis没同步到Git仓库的最新内容。
内容的提问来源于stack exchange,提问作者Fabb

