#!/usr/bin/env bash set -euo pipefail # 当前阶段只负责启动本地 standalone SpacetimeDB,先把服务器进程和数据目录口径固定下来,不提前耦合 publish 流程。 usage() { cat <<'EOF' 用法: ./server-rs/scripts/spacetime-dev.sh GENARRATIVE_SPACETIME_PORT=3101 ./server-rs/scripts/spacetime-dev.sh 说明: 1. 启动 Genarrative Rust 后端使用的本地 standalone SpacetimeDB 2. 默认把本地数据目录放到 `server-rs/.spacetimedb/local` 3. 当前阶段只负责启动 standalone server,暂不自动 publish `crates/spacetime-module` EOF } if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then usage exit 0 fi SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" SERVER_RS_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)" LISTEN_HOST="${GENARRATIVE_SPACETIME_HOST:-127.0.0.1}" PORT="${GENARRATIVE_SPACETIME_PORT:-3001}" ROOT_DIR="${GENARRATIVE_SPACETIME_ROOT_DIR:-${SERVER_RS_DIR}/.spacetimedb/local}" if [[ ! -f "${SERVER_RS_DIR}/crates/spacetime-module/README.md" ]]; then echo "[server-rs:spacetime-dev] 未找到 crates/spacetime-module/README.md,无法启动本地 SpacetimeDB 脚本。" >&2 exit 1 fi if ! command -v spacetime >/dev/null 2>&1; then echo "[server-rs:spacetime-dev] 缺少 spacetime CLI。" >&2 echo "[server-rs:spacetime-dev] 安装文档: https://spacetimedb.com/install" >&2 echo "[server-rs:spacetime-dev] Linux/macOS 安装命令: curl -sSf https://install.spacetimedb.com | sh" >&2 exit 1 fi mkdir -p "${ROOT_DIR}" echo "[server-rs:spacetime-dev] 工作目录: ${SERVER_RS_DIR}" echo "[server-rs:spacetime-dev] 数据目录: ${ROOT_DIR}" echo "[server-rs:spacetime-dev] 监听地址: ${LISTEN_HOST}:${PORT}" echo "[server-rs:spacetime-dev] 模式: standalone" echo "[server-rs:spacetime-dev] 说明: 当前阶段暂不自动 publish crates/spacetime-module" cd "${SERVER_RS_DIR}" spacetime --root-dir "${ROOT_DIR}" start --edition standalone --listen-addr "${LISTEN_HOST}:${PORT}"