Skip to content

[P2][app] 统一 Builder 与 Trait 的配置解析、地址优先级和启动流程 #92

Closed

Description

@Kilerd

问题与影响

两套 API 目前共享最终路由装配,但分别实现配置加载、状态初始化、任务启动及监听。

  • Gotcha::run() 在加载配置前就根据 self.host/self.port 决定地址;配置文件或 .config(...) 中的 server 设置不会作为 run 的地址来源。
  • GotchaApp::run() 则使用 config.server。
  • Builder 配置失败时警告并回退 Default;Trait 返回错误。Builder 的宽松策略是已文档化行为,但 API 选择同时决定错误处理策略。
    这使同一配置在两套入口下出现不同监听行为和失败语义。

证据与位置

静态沿调用链确认:

调整方向

保留用户入口,共享 prepare/build/serve 内部路径。将显式监听参数、Builder 覆盖项、配置文件及默认值的优先级统一定义;严格/宽松加载应是明确策略,不应隐含在 API 选择里。

验收标准

  • 同一配置与策略下两套 API 使用相同监听地址和配置错误语义。
  • 覆盖显式 listen、host/port 覆盖、config.server、默认值的优先级。
  • 显式覆盖项能区分“未设置”和“恰好等于默认值”。
  • 非法配置不能在未选择回退策略时静默变成默认配置。
  • 状态构造、任务注册及监听失败的执行顺序明确。
  • 回归测试驱动真实行为,提供迁移说明。

相关:#30 的后续整合;#85 中 Builder 配置宽松策略;#82 生命周期;#83 env-only 配置。

实现进度

PR #111 已合入(4369222f0f5f94db9b220f0efa0f18608e0c262b),11 项 GitHub CI 检查全部通过。

  • Builder 与 Trait 共用内部启动流程,配置错误默认严格返回,可通过 ConfigErrorPolicy 显式选择回退。
  • 监听优先级统一为显式 listen 地址 > 独立 host/port 覆盖 > config.server > 框架默认值。
  • 先绑定端口,再初始化状态、路由和任务;上下文包含实际绑定地址,初始化失败释放监听端口。
  • 本地默认及全部 feature 测试、Clippy、格式检查通过;包含真实 HTTP 和启动失败路径验证,迁移文档已补充。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions