Spiral Framework 安装失败主因是 PHP≥8.1且需sodium/pcntl/posix扩展、Composer≥v2.5、.rr.yaml配置正确;应按需安装core包而非全量引入,RoadRunner需手动获取二进制并检查端口与权限。

Composer 安装 Spiral Framework 失败:常见报错和基础条件
直接运行 composer create-project spiral/app 很可能卡住或报错,不是你命令写错了,而是 Spiral 对 PHP 版本、扩展和 Composer 自身版本有硬性要求。
- PHP 必须 ≥ 8.1(
ext-sodium、ext-pcntl、ext-posix缺一不可,RoadRunner 启动时会检查) - Composer 必须是 v2.5+(旧版会因 Spiral 的
spiral-packages元包解析失败) - 若提示
Could not find package spiral/app,大概率是 packagist.org 镜像源没同步最新元数据,临时切回官方源:composer config -g repo.packagist composer https://packagist.org
用 Composer 引入 Spiral 到现有项目:别直接 require spiral/framework
直接 composer require spiral/framework 会装一堆没用的开发组件(比如 spiral/jobs、spiral/roadrunner-bridge),还可能跟已有依赖冲突。Spiral 推荐按需引入核心包。
- 最小可用组合只需三件套:
composer require spiral/framework spiral/router spiral/http - 要跑 RoadRunner,必须加
spiral/roadrunner-bridge(注意不是spiral/roadrunner,后者是旧版已废弃) - 如果项目已有 PSR-7 实现(如
nyholm/psr7),Spiral 会自动适配;但若用guzzlehttp/psr7,得额外composer require guzzlehttp/psr7并在app.php中显式配置PSR7Factory
启动 RoadRunner 报错 “unable to bind address” 或 “failed to load .rr.yaml”
这不是 Spiral 的问题,而是 RoadRunner 配置和权限没对齐。Spiral 默认用 .rr.yaml,但文件位置、格式、端口都容易出错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
.rr.yaml必须放在项目根目录(和composer.json同级),不能放config/下 - 确保
http.address不被占用,例如改成http.address: 0.0.0.0:20080而非默认的:8080 - Windows 用户若用 WSL,
rpc.listen不能写tcp://127.0.0.1:6001,得换成tcp://localhost:6001,否则 Spiral 连不上 RR 进程 - 首次运行前手动执行
./rr get-binary(Linux/macOS)或rr get-binary(Windows),别指望 Composer 脚本自动搞定
为什么 spiral/app 模板里没有 public/index.php?
Spiral 8+ 彻底弃用传统 PHP-FPM 入口,所有 HTTP 请求走 RoadRunner 的 worker 进程,所以不需要 index.php。入口逻辑全在 app/src/Application/Bootloader/HttpBootloader.php 里注册路由和中间件。
立即学习“PHP免费学习笔记(深入)”;
- 如果你强行加
public/index.php并用 Apache/Nginx 反代,Spiral 会忽略它,照样只响应 RR 的请求 - 调试时想快速看输出?用
php -S localhost:8000 -t public是无效的,得改用php app.php http:serve(内置 SAPI 模式,仅限开发) - 部署到生产环境时,Nginx 只需反代到
http://127.0.0.1:20080(RR 监听地址),其他转发规则全不用配
真正卡住人的地方,往往不是 Spiral 写法多难,而是 RoadRunner 的二进制权限、YAML 缩进、PHP 扩展缺失这三样——调通之前,先在终端里挨个敲 php -v、php -m | grep -E "sodium|pcntl|posix"、ls -l ./rr 看清楚再动手。


















