# 排障手册
## 编译失败
症状:`cargo build`、`cargo test` 或 `cargo clippy` 失败。
原因:Rust toolchain 过旧、依赖未解析、代码或生成文件不符合 workspace 约束。
解决步骤:
1. 运行 `cargo metadata --format-version 1 --no-deps` 确认 workspace 可解析。
2. 运行 `cargo fmt --all -- --check` 检查格式。
3. 运行 `cargo clippy --workspace --all-targets -- -D warnings` 查看具体 lint。
4. 按第一个错误修复,不要同时修改无关模块。
验证方式:重新运行失败命令和 `cargo test --workspace`。
## CLI 拒绝覆盖文件
症状:命令返回 `already exists`。
原因:rs-zero 生成器默认保护已有文件。
解决步骤:
1. 确认目标目录是否已有生成结果。
2. 查看现有文件是否包含手写改动。
3. 确认要覆盖后添加 `--force`。
验证方式:重新运行对应 `api gen`、`model gen`、`rpc gen` 或 `api format` 命令。
## API parser 报 unknown type
症状:`api validate` 返回 `unknown request type` 或 `unknown response type`。
原因:route 引用了未定义的 type,或 import 文件没有被正确解析。
解决步骤:
1. 检查 `.api` 中 type 名称大小写。
2. 检查 `import "..."` 是否相对当前 `.api` 文件存在。
3. 用 `cargo test -p rs-zero-cli --test goctl_api_compat` 对照兼容 fixture。
验证方式:重新运行 `cargo run -p rs-zero-cli -- api validate -f <file.api>`。
## RPC import missing
症状:`rpc gen` 返回 missing import。
原因:proto import 路径既不能相对 root proto 解析,也不能相对当前 proto 文件解析。
解决步骤:
1. 检查 import 路径拼写。
2. 确认 sibling、subdir 或 transitive import 文件存在。
3. well-known import 如 `google/protobuf/timestamp.proto` 不需要本地文件。
验证方式:运行 `cargo test -p rs-zero-cli --test goctl_rpc_compat`。
## Model parser 无法识别 SQL
症状:`model gen` 返回 schema 不包含 `CREATE TABLE` 或 parse error。
原因:输入不是当前支持的 MySQL `CREATE TABLE` 子集,或 SQL 被迁移语句包裹。
解决步骤:
1. 先提取单个 `CREATE TABLE` 验证。
2. 检查字段、索引、comment/default/on-update 是否符合常见 MySQL DDL。
3. 对照 `tests/fixtures/goctl/model/user.sql`。
验证方式:运行 `cargo test -p rs-zero-cli --test goctl_model_compat`。
## 外部 adapter 测试被 ignored
症状:测试输出显示 etcd、OTLP 等 external placeholder ignored。
原因:默认测试不依赖外部服务,这是预期行为。
解决步骤:
1. 阅读 `examples/production-adapters/README.md`。
2. 启动对应 docker compose 或外部服务。
3. 显式运行 ignored/external 测试。
验证方式:外部服务就绪后运行对应 `cargo test --ignored ...` 命令。