62 lines
3.4 KiB
Markdown
62 lines
3.4 KiB
Markdown
# 运行与宿主存储
|
||
|
||
这里说明跨 CLI、Server 和 Storage 的运行流程。当前本机禁止构建、测试、冒烟与依赖下载;以下命令供用户指定的远端环境执行。环境变量见 [配置](configuration.md),容器和生产服务见 [部署](deployment.md),检查见 [验证](validation.md)。
|
||
|
||
## 构建与 CLI
|
||
|
||
工作区要求 Rust 1.91 或兼容更高版本;构建镜像固定 rust:1.91.1-bookworm,依赖由 Cargo.lock 锁定。
|
||
|
||
```sh
|
||
cargo build --workspace --locked
|
||
cargo run -p aster-cli -- bootstrap
|
||
```
|
||
|
||
bootstrap 创建两个 Record,输出 runtime=EndorObject、type_system=disabled、objects_distinct=true 和 heap_objects=2,显式释放后输出 released heap_objects=0。它不读取数据库配置,因此无效 DATABASE_URL 也不影响该命令。
|
||
|
||
```sh
|
||
cargo run -p aster-cli -- metadata put project 'Aster VM'
|
||
cargo run -p aster-cli -- metadata get project
|
||
```
|
||
|
||
每次 metadata 命令读取宿主存储配置、连接、操作并关闭连接池;缺失键显示 (missing)。命令和退出码的源码位置见 [cli/src](../../crates/cli/src/README.md)。
|
||
|
||
## HTTP 宿主
|
||
|
||
```sh
|
||
cargo run -p aster-server
|
||
curl --fail http://127.0.0.1:8080/health
|
||
curl --fail http://127.0.0.1:8080/bootstrap
|
||
```
|
||
|
||
Server 创建空 VM、连接存储、初始化元数据表并写入 host.version,随后绑定监听地址。连接、初始化或绑定失败会退出,不降级换库。默认地址为 127.0.0.1:8080。
|
||
|
||
| 端点 | 行为 |
|
||
| --- | --- |
|
||
| GET /health | 实际 ping 数据库;成功返回 200,失联返回 503,含 status 和 storage 后端名 |
|
||
| GET /bootstrap | 返回 object_model=EndorObject、type_system=false、heap_objects=0;只读,不分配对象 |
|
||
|
||
当前未提供语言执行、对象写入或认证 API。Unix 上 Ctrl-C/SIGTERM 触发 Axum 优雅退出,等待服务结束后关闭共享 Storage;最后的 Arc 释放时销毁 Vm。没有执行中脚本的取消协议。
|
||
|
||
## 存储契约
|
||
|
||
Storage 不依赖 Core,只保存宿主元数据。连接时执行 schema.sql:aster_metadata 的 key 为非空文本主键,value 为非空文本。put 使用参数绑定并更新重复键,get 对不存在的键返回 None。当前只有幂等建表,没有版本化迁移;CREATE IF NOT EXISTS 不能升级已有列结构。
|
||
|
||
| 后端 | 当前行为 |
|
||
| --- | --- |
|
||
| SQLite 文件 | 默认 data/aster.db,相对当前工作目录;创建父目录和文件,开启 WAL,最多 5 个连接,busy timeout 5 秒 |
|
||
| SQLite 内存 | SQLITE_PATH=:memory:;单连接、不做空闲回收和最大存活轮换;不同 Storage 实例隔离 |
|
||
| PostgreSQL | DATABASE_URL 显式选择;最多 5 个连接,连接池获取超时 5 秒,启动即真实连接;失败不回退 SQLite |
|
||
|
||
Storage 克隆共享连接池,close 会关闭所有克隆使用的池。元数据可跨进程保存;VM 堆、句柄、全局对象和执行帧不持久化。重启服务创建新的空 VM。
|
||
|
||
## 出错时先查哪里
|
||
|
||
| 现象 | 定位 |
|
||
| --- | --- |
|
||
| bootstrap 正常,metadata/服务启动失败 | [存储配置](configuration.md)、[storage/src](../../crates/storage/src/README.md) |
|
||
| /health 返回 503 | 当前数据库连接;该端点不检测语言执行能力 |
|
||
| 容器替换后元数据丢失 | [卷与生产数据路径](deployment.md),先确认是否使用内存库 |
|
||
| 重启后找不到原 VM 对象 | 当前未实现 VM 快照,见 [生命周期](../runtime/lifecycle.md) |
|
||
|
||
返回 [文档索引](../README.md)。
|