必须切换国内镜像源才能解决Deployer中composer install卡在“Loading composer repositories”的问题,推荐华为云镜像(https://mirrors.huaweicloud.com/composer/),因其当前最稳定;需通过ssh提前执行composer config -g repo.packagist composer https://mirrors.huaweicloud.com/composer/全局配置,或在Deployer中用set('composer_options', '--repository-url=https://mirrors.huaweicloud.com/composer/')显式指定,同时确保工作路径正确(--working-dir={{release_path}})并指定PHP路径(set('bin/php', '/usr/bin/php8.1'))以避免版本不一致导致失败。

Deployer里执行composer install为什么总卡在“Loading composer repositories”
因为默认走 packagist.org,国内服务器访问极慢或超时。这不是 Deployer 本身的问题,而是 Composer 源没切。
- 别在
deploy.php里硬写composer install就完事——它会用目标机默认源,大概率卡死 - 推荐做法:部署前统一换源,比如 ssh 连上去执行
composer config -g repo.packagist composer https://mirrors.huaweicloud.com/composer/ - 阿里云镜像已停用,
https://packagist.phpcomposer.com维护不稳定,华为云镜像是当前最稳的选择 - 如果不能提前改全局配置,可在 Deployer 中显式传参:
set('composer_options', '--repository-url=https://mirrors.huaweicloud.com/composer/');
Deployer调用composer install时找不到composer.json怎么办
Deployer 默认不自动 cd 到发布目录,所以它读的可能是用户家目录或临时路径下的 composer.json,而不是你刚 rsync 上去的那个。
- 必须显式指定工作路径:
set('composer_install_flags', '--working-dir={{release_path}}'); - 确认
{{release_path}}已正确定义(默认是{{deploy_path}}/releases/{{release_name}}),且composer.json确实随代码同步过去了 - 如果用了
shared_dirs把vendor提出来复用,记得关掉--prefer-dist,否则缓存校验失败会中断 - 更稳妥的做法:用
{{bin/php}} {{release_path}}/composer.phar install,避免依赖系统级composer命令
PHP版本不一致导致线上composer install失败
本地 composer install 成功,一上生产就报错,大概率是 PHP 版本或二进制路径不匹配。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Deployer 默认调用
php,但生产环境常用php8.1或通过update-alternatives切换过,和本地开发环境不一致 - 强制指定 PHP 路径:
set('bin/php', '/usr/bin/php8.1');(先 ssh 登录确认真实路径) - 检查
composer --version输出里的 “PHP version”,必须和php -v一致;否则说明 Composer 是用另一个 PHP 编译的 - Docker 部署时,别在 host 上跑 Composer,改用:
run('cd {{release_path}} && docker run --rm -v $(pwd):/app -w /app php:8.1-cli composer install')
Deployer中该不该用--no-dev、--optimize-autoloader这些参数
线上环境必须加,不是可选项。
-
--no-dev是底线:否则会装 PHPUnit、PHPStan 等一堆开发工具,拖慢部署、暴露风险 -
--optimize-autoloader(可简写为-o)生成 classmap,提升加载性能,尤其适合生产环境 -
--classmap-authoritative进一步关闭动态查找,配合--no-dev和-o使用效果最佳 - 敏感操作如数据库迁移,建议加
--no-interaction --force,否则脚本会卡住等输入
复杂点在于参数组合与环境适配——比如 shared vendor 目录下不能用 --prefer-dist,Docker 构建阶段要绕过 host 的 PHP 环境,这些细节漏掉一个,部署就可能静默失败。

















