3.3 KiB
运行宿主
CLI 提供 VM 引导、源码解析及文件基础信息,Server 提供状态与文件基础信息,二者不连接数据库。Storage 为未来数据库特殊类保留显式连接能力,见 数据库对象。以下构建和运行命令仅供用户指定的远端环境,本地不执行。
CLI
工作区要求 Rust 1.91 或兼容更高版本,镜像固定 rust:1.91.1-bookworm,依赖由 Cargo.lock 锁定。
cargo build --workspace --locked
cargo run -p cli -- bootstrap
cargo run -p cli -- help
cargo run -p cli -- parse crates/frontend/examples/basic.endor
bootstrap 创建两个 Record,输出 runtime=EndorObject、type_system=disabled、objects_distinct=true 和 heap_objects=2,显式释放后输出 released heap_objects=0。默认无参数执行同一示例。
parse 严格读取 UTF-8 源码文件,成功时输出 Rust Debug 格式的 AST;失败时输出文件、行、列并返回非零退出码。该命令只解析语法,不执行源码;语法与当前边界见 源码前端。
CLI 不读取数据库环境,不创建基础信息数据库表。metadata put/get 通过 host 包写 UTF-8 JSON 文件,metadata import 仅导入缺失记录;示例、配置和协议见 宿主信息。输入与退出码见 cli/src。
HTTP
cargo run -p server
curl --fail http://127.0.0.1:8080/health
curl --fail http://127.0.0.1:8080/bootstrap
Server 创建空 VM 并绑定监听地址,默认 127.0.0.1:8080;通过 host 包写入文件 host.version,不读取数据库 URL、不建表。
| 端点 | 行为 |
|---|---|
| GET /health | 返回 200 和 status=ok;仅表明 HTTP 宿主存活,不包含数据库后端字段 |
| GET /bootstrap | 返回 object_model=EndorObject、type_system=false、heap_objects=0;只读、不分配对象 |
没有语言执行、对象写入或认证 API。Unix 上 Ctrl-C/SIGTERM 触发 Axum 优雅退出,最后的 Arc 释放时销毁 Vm;没有数据库池需要在此处关闭,也没有执行中脚本的取消协议。
数据库能力的使用位置
当前应用不把数据库作为启动依赖;即使进程带有失效 DATABASE_URL 或 SQLITE_PATH,也不会因此读取它们。特殊类将来需要连接时,宿主适配实现显式传入 DatabaseConfig,详见 配置。
Storage 支持 SQLite 文件/内存和 PostgreSQL,不自带应用 schema 或 key/value 数据模型。旧数据库数据保留原位,发布时只读导入到文件信息;新的普通宿主不会继续写入数据库;数据持久化也不自动保存 VM 堆、句柄或帧。
定位问题
| 现象 | 定位 |
|---|---|
| Server 无法绑定地址 | ASTER_LISTEN 与端口占用,见 配置 |
| /health 正常但数据库不可用 | health 不检测数据库;当前没有使用数据库的语言类 |
| 重启后 VM 对象消失 | 当前未实现 VM 快照,见 生命周期 |
| 需要连接或查询数据库 | storage 和 数据库对象;先定义实际特殊类接口 |