一个支持用户上传文件和 AI 分析的应用,真正需要保存的通常不止一份原始文件:用户上传的计划书、AI 生成的结果、外部获取的资料,最终都应该有统一的对象存储位置、元数据、权限和下载方式。
本文以一个 Go net/http + Vue 3 + PostgreSQL/MySQL 应用的实际实现为例,记录如何在保留本地存储回退能力的前提下接入 Cloudflare R2,并把 R2 配置和素材管理放进 Owner 管理后台。
Go + Vue 管理后台接入 Cloudflare R2:把上传、AI 生成和外部素材统一保存
Redis Stream Worker 并发失效:为什么任务只能一个一个执行
Redis Stream 的 XREADGROUP 配置了批量读取,并不代表业务处理会并发执行。一次实际排查中,Worker 的读取数量是 10,但消息处理函数仍在一个循环里同步调用,因此生成任务表现为“只能一个接一个执行”。修复后,单个 Worker 默认可以同时处理 4 个任务,并且并发上限可以通过环境变量调整。
Go 服务启动 panic:对象存储 400 不应该阻塞 API 启动
对象存储的临时故障不应该让整个 API 进程无法启动。本文记录一次 Go 服务启动时检查 S3 Bucket 收到 400 Bad Request、容器随后退出的真实排查过程,并给出一套适用于 S3 兼容存储的启动策略。
AI 生图显示 PROVIDER_SUBMISSION_UNKNOWN:真正失败在 R2 资产入库
任务状态显示 PROVIDER_SUBMISSION_UNKNOWN 时,不一定意味着模型服务没有返回结果。一次实际故障证明,供应商已经完成生图,失败发生在结果写入 R2 的最后一步。本文记录如何通过 Attempt 持久化数据还原真实数据流,并修正错误分类和凭据校验。
Go + Vue 3 全栈实战:从任务 CRUD 到 Docker Compose 部署
用 Go + Vue 3 开发网站,真正费时间的通常不是写出第一个接口或页面,而是把数据库迁移、前后端联调、健康检查、容器构建和生产配置连成一套可重复的流程。
这篇教程会完成一条真实的全栈链路:Vue 3 页面通过类型化 API 客户端调用 Go 服务,Go 将数据写入 PostgreSQL,并通过 Docker Compose 同时管理 Web、API、数据库与 Redis。最后,我们会把同一套项目切换到生产形态并部署到服务器。
如果你只想尽快跑起来,可以直接使用我整理的开源模板:glosc-ai/template-go-vue3-docker。它自带任务 CRUD,不是一个只能看到空白首页的“目录模板”。下文所有命令和目录都基于该项目截至 2026 年 8 月 5 日的 main 分支。