缓存路径必须为 ~/.composer/cache,key 需含 hashFiles('**/composer.lock'),且需提前配置镜像源并确保 COMPOSER_CACHE_DIR 环境变量全局生效,否则缓存不命中或损坏导致安装失败。

缓存路径根本没写对,~/.composer/cache 被当成普通目录处理
CI 里报“找不到可用缓存文件”,往往不是缓存不存在,而是 actions/cache@v3 的 path 配置写成了 vendor/ 或 ./vendor,导致缓存键根本没命中 Composer 自身的下载缓存。Composer 只读 ~/.composer/cache,它不关心 vendor 目录是否存在。
- 必须用
path: ~/.composer/cache,不能缩写成cache或漏掉波浪线 - 确认 runner 用户能访问该路径:执行
ls -la ~/.composer/cache,若报 “No such file or directory”,说明 Composer 还没初始化过,先跑一次composer --version触发创建 - key 中必须包含
${{ hashFiles('**/composer.lock') }},否则 lock 文件一变,缓存就失效,看似“找不到”,实则是 key 不匹配
COMPOSER_CACHE_DIR 环境变量被覆盖或未生效
有些 CI 脚本会误设 COMPOSER_CACHE_DIR=/tmp/composer-cache,但没同步创建该目录,也没给权限;或者在不同步骤中反复覆盖,导致后续步骤读不到缓存。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 统一在 job 级别设置环境变量:
env: { COMPOSER_CACHE_DIR: ~/.composer/cache },避免 step 内重复 set - 不要在 run 命令里用
export COMPOSER_CACHE_DIR=...—— 它只对当前 shell 生效,下一行就丢了 - 验证是否生效:在
composer install前加一步echo $COMPOSER_CACHE_DIR && composer config --global cache-dir,输出必须一致
缓存损坏后 composer clear-cache 在 CI 里无效
CI runner 多为临时容器,但缓存目录可能挂载自持久卷(如 GitHub Actions 的 self-hosted runner),composer clear-cache 只清内存映射,实际磁盘上损坏的 ZIP 还在。
- 直接删缓存目录更可靠:
rm -rf ~/.composer/cache/files(保留repo和metadata可加速元数据加载) - 加
--no-cache强制跳过所有缓存:COMPOSER_CACHE_DIR=/dev/null composer install --no-cache --prefer-dist - 如果日志出现
Failed to extract或corrupted archive,基本可断定是缓存损坏,别再 retry,先清再装
镜像源配置错位,缓存里存的还是 packagist.org 的元数据
缓存内容取决于你当时用哪个源拉的包。如果 composer config -g repo.packagist 输出仍是 https://packagist.org,那缓存里全是官方源的哈希和 URL,换镜像后照样失败。
- 必须在缓存步骤之前完成镜像配置:
composer config -g repo.packagist https://mirrors.aliyun.com/composer/ - 检查 URL 末尾是否有斜杠 —— 少了斜杠会导致配置静默失效,
composer config -g repo.packagist输出为空即为此因 - 私有包务必配
repositories到项目级composer.json,全局镜像对它们无效

















