fix(dev): publish spacetime module from server workspace
Some checks failed
CI / verify (pull_request) Has been cancelled
Some checks failed
CI / verify (pull_request) Has been cancelled
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
- 实测后确认:真正需要隔离的是 standalone 的 `data-dir`,不需要把 publish 也绑到项目级 root-dir。
|
- 实测后确认:真正需要隔离的是 standalone 的 `data-dir`,不需要把 publish 也绑到项目级 root-dir。
|
||||||
- 早期脚本曾通过把用户级 SpacetimeDB 可执行文件目录同步到 `server-rs/.spacetimedb/local/bin/current` 来满足 standalone 回调需求,但这会把整套可执行文件复制进项目本地目录,维护成本高,也容易和用户级 CLI 版本漂移。
|
- 早期脚本曾通过把用户级 SpacetimeDB 可执行文件目录同步到 `server-rs/.spacetimedb/local/bin/current` 来满足 standalone 回调需求,但这会把整套可执行文件复制进项目本地目录,维护成本高,也容易和用户级 CLI 版本漂移。
|
||||||
- 多个 worktree 同时启动时,SpacetimeDB 端口可能冲突;CLI 会询问是否使用最近的可用端口。
|
- 多个 worktree 同时启动时,SpacetimeDB 端口可能冲突;CLI 会询问是否使用最近的可用端口。
|
||||||
|
- 若 `npm run dev` 从仓库根目录直接执行 `spacetime publish --module-path server-rs/crates/spacetime-module`,内部 Cargo 不一定读取 `server-rs/.cargo/config.toml`,可能绕过 sccache/linker/target 缓存策略,表现为 spacetime-module 每次像全量重编译。
|
||||||
- `api-server` 首次冷编译时,默认 300 秒超时不够,容易在就绪前被回收。
|
- `api-server` 首次冷编译时,默认 300 秒超时不够,容易在就绪前被回收。
|
||||||
|
|
||||||
## 当前方案
|
## 当前方案
|
||||||
@@ -20,9 +21,10 @@
|
|||||||
- 脚本向 `spacetime start` 发送回车,接受“最近可用端口”的默认建议。
|
- 脚本向 `spacetime start` 发送回车,接受“最近可用端口”的默认建议。
|
||||||
- 随后从启动日志中的 `Starting SpacetimeDB listening on ...` 解析实际端口。
|
- 随后从启动日志中的 `Starting SpacetimeDB listening on ...` 解析实际端口。
|
||||||
- 解析出的实际端口会覆盖 `SPACETIME_SERVER`,后续 publish、api-server、前端代理统一使用这个端口。
|
- 解析出的实际端口会覆盖 `SPACETIME_SERVER`,后续 publish、api-server、前端代理统一使用这个端口。
|
||||||
4. publish 不再使用项目级 root-dir
|
4. publish 不再使用项目级 root-dir,但要从 `server-rs` 目录执行
|
||||||
- 发布模块改为 `spacetime publish ... --server "${SPACETIME_SERVER}" ...`。
|
- 发布模块改为在 `server-rs` 下执行 `spacetime publish ... --server "${SPACETIME_SERVER}" ...`。
|
||||||
- 这样 publish 使用用户级 CLI 默认身份/配置,不再依赖 worktree 内 root-dir。
|
- 这样 publish 使用用户级 CLI 默认身份/配置,不再依赖 worktree 内 root-dir。
|
||||||
|
- 同时确保内部 Cargo 能读取 `server-rs/.cargo/config.toml`,复用项目级 sccache/linker/target 缓存策略,避免 `npm run dev` 比手动 publish 更容易触发慢速重编译。
|
||||||
5. 提高 api-server 就绪等待时间
|
5. 提高 api-server 就绪等待时间
|
||||||
- `API_SERVER_TIMEOUT_SECONDS` 保持 600,降低首次冷编译误判失败概率。
|
- `API_SERVER_TIMEOUT_SECONDS` 保持 600,降低首次冷编译误判失败概率。
|
||||||
|
|
||||||
@@ -35,8 +37,10 @@
|
|||||||
- SpacetimeDB 能正常监听,并输出 `spacetime actual: http://127.0.0.1:<实际端口>`。
|
- SpacetimeDB 能正常监听,并输出 `spacetime actual: http://127.0.0.1:<实际端口>`。
|
||||||
- 若默认端口被占用,脚本应自动接受 SpacetimeDB 建议端口,并用实际端口发布模块、启动 api-server 和前端代理。
|
- 若默认端口被占用,脚本应自动接受 SpacetimeDB 建议端口,并用实际端口发布模块、启动 api-server 和前端代理。
|
||||||
- 模块发布成功。
|
- 模块发布成功。
|
||||||
|
- 第二次无改动 publish 应接近手动 `cd server-rs && spacetime publish ...` 的增量速度。
|
||||||
- api-server 进入健康检查等待并最终可访问 `/healthz`。
|
- api-server 进入健康检查等待并最终可访问 `/healthz`。
|
||||||
|
|
||||||
## 相关文件
|
## 相关文件
|
||||||
- `scripts/dev-rust-stack.sh`
|
- `scripts/dev-rust-stack.sh`
|
||||||
- `server-rs/.spacetimedb/local/data/`
|
- `server-rs/.spacetimedb/local/data/`
|
||||||
|
- `server-rs/.cargo/config.toml`
|
||||||
|
|||||||
@@ -541,7 +541,12 @@ if [[ "${SKIP_PUBLISH}" -ne 1 ]]; then
|
|||||||
PUBLISH_ARGS+=(--yes)
|
PUBLISH_ARGS+=(--yes)
|
||||||
|
|
||||||
echo "[dev:rust] 发布 SpacetimeDB 模块: ${DATABASE}"
|
echo "[dev:rust] 发布 SpacetimeDB 模块: ${DATABASE}"
|
||||||
spacetime "${PUBLISH_ARGS[@]}"
|
(
|
||||||
|
cd "${SERVER_RS_DIR}"
|
||||||
|
# spacetime publish 会在内部调用 Cargo;从 server-rs 目录执行,确保读取
|
||||||
|
# server-rs/.cargo/config.toml 中的 sccache/linker 配置,并复用同一套 target 缓存。
|
||||||
|
spacetime "${PUBLISH_ARGS[@]}"
|
||||||
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[dev:rust] 启动 api-server"
|
echo "[dev:rust] 启动 api-server"
|
||||||
|
|||||||
Reference in New Issue
Block a user