3.2 KiB
3.2 KiB
SpacetimeDB Maincloud 发布与 api-server 适配方案
目标
新增一条明确的 npm 命令链,用于把 server-rs/crates/spacetime-module 发布到 SpacetimeDB Maincloud,并让 api-server 可以使用同一套 Maincloud 数据库配置启动。
环境变量约定
Maincloud 发布不复用本地 spacetime.local.json,避免误把本地开发库名发布到云端。需要显式提供:
| 变量 | 用途 |
|---|---|
GENARRATIVE_SPACETIME_MAINCLOUD_DATABASE |
Maincloud 数据库名,发布脚本优先读取 |
GENARRATIVE_SPACETIME_MAINCLOUD_SERVER_URL |
Maincloud 服务地址,默认 https://maincloud.spacetimedb.com |
GENARRATIVE_SPACETIME_MAINCLOUD_TOKEN |
api-server 连接 Maincloud 时使用的 token |
兼容 api-server 现有变量:
| 变量 | 用途 |
|---|---|
GENARRATIVE_SPACETIME_SERVER_URL |
api-server 实际连接地址 |
GENARRATIVE_SPACETIME_DATABASE |
api-server 实际连接数据库 |
GENARRATIVE_SPACETIME_TOKEN |
api-server 实际连接 token |
npm 命令
npm run spacetime:publish:maincloud
执行内容:
- 使用
cargo build -p spacetime-module --target wasm32-unknown-unknown --release构建 wasm。 - 使用
spacetime publish <database> --server maincloud --bin-path <wasm> --yes发布到 Maincloud。 - 发布前输出目标数据库名和 server,便于在 Jenkins 或手工日志中确认实际发布目标。
- 输出
api-server需要的 Maincloud 环境变量,便于部署进程复用。
如需 schema 冲突时清库发布:
npm run spacetime:publish:maincloud -- --clear-database
api-server 启动
npm run api-server:maincloud
执行内容:
- 从
.env与.env.local读取默认环境。 - 将
GENARRATIVE_SPACETIME_MAINCLOUD_*映射为api-server已支持的GENARRATIVE_SPACETIME_*。 - 在 Windows 启动前检查
server-rs/target/debug/api-server.exe对应的旧进程;如果旧进程仍在运行,先停止它,避免 Rust 编译阶段覆盖 exe 时出现failed to remove file ... 拒绝访问。 (os error 5)。 - 启动
cargo run -p api-server --manifest-path server-rs/Cargo.toml。
设计约束
- Maincloud 数据库名必须显式配置,不能默认读取本地
spacetime.local.json。 - Maincloud 数据库名必须匹配
^[a-z0-9]+(-[a-z0-9]+)*$,只能使用小写字母、数字,并用单个短横线分隔;否则spacetime publish会报invalid characters in database name。 - 发布脚本只处理 SpacetimeDB 模块发布,不启动本地 SpacetimeDB。
api-server继续通过SpacetimeClientConfig的server_url / database / token连接数据库,不在前端增加逻辑。- Windows 进程清理只能匹配本仓库
server-rs/target/debug/api-server.exe的完整路径,不能按进程名泛化清理,避免影响其他 Rust 服务。