Skip to content

fix(models): 同步模型改为异步触发,避免 Cloudflare 100s 超时 - #899

Merged
chenyme merged 3 commits into
chenyme:mainfrom
mcheiyue:fix/sync-async
Aug 13, 2026
Merged

fix(models): 同步模型改为异步触发,避免 Cloudflare 100s 超时#899
chenyme merged 3 commits into
chenyme:mainfrom
mcheiyue:fix/sync-async

Conversation

@mcheiyue

@mcheiyue mcheiyue commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

为什么同步模型按钮会报 "Failed to fetch"?

根因: 同步模型是全量同步所有启用账号的上游模型能力,耗时超过 2 分钟。Cloudflare 免费版 origin timeout 上限 100s,Nginx 默认 proxy_read_timeout 60s,请求在中间层被掐断 → 浏览器收到连接中断 → Failed to fetch

改动: 后端 /api/admin/v1/models/sync 改为异步触发

  • handler 不再阻塞等待同步完成,立即返回 200 {"synced":0,"async":true}
  • 新增 Service.SyncAsync,用 context.Background() 触发同步,请求断开不影响同步继续执行
  • 复用已有的 singleflightDoChan("all", ...))去重,并发点击只会同步一次
  • 前端无需改动:页面刷新后模型列表自动更新

验证: 修复前直接调 API 126s 后被 Cloudflare 掐断(HTTP 524);修复后立即返回 200,后台同步正常完成。

附加说明: 上游 README 中已建议 proxy_read_timeout 600s,但 Cloudflare 免费版 100s 上限无法通过 Nginx 配置绕过,因此异步触发是更稳妥的解法。

@chenyme
chenyme merged commit 3e4509c into chenyme:main Aug 13, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants