Skip to content

turso 迁回本仓后,CLI 的 URL→driver 解析仍对 libsql:// 抛 UnsupportedDriverError —— runtime 的 provisioning 却把 turso 排在偏好第一位,两处口径相反 #5602

Description

@os-zhuang

发现于#4645 Phase A(@objectstack/driver-turso 迁入 packages/drivers/driver-turso)。Phase A 只做迁移,没有动任何接线;这个单记的是迁移暴露出来的口径分叉,需要维护者裁定要不要接。

现状(迁移后实测)

同一个仓库里,两处对 turso 的态度相反:

A. runtime 把 turso 当默认首选

  • packages/runtime/src/http-dispatcher.ts:1520 —— 环境 provisioning 的偏好顺序:tursomemory → 任意其他已注册 driver
  • 同文件 :1495 —— POST /cloud/environmentsdriver 参数示例即 memory | turso
  • packages/objectql/src/engine.ts:4086 —— turso 专属的瞬时 fetch failed 重试

B. CLI 的 URL 推断明文拒收 turso

  • packages/cli/src/utils/storage-driver.ts resolveStorageDefinition()driverType === 'turso' || 'libsql'UnsupportedDriverError
  • packages/cli/src/commands/serve.ts 把它当 fatal 重抛,boot 直接 exit 1
  • inferDriverTypeFromUrl() 仍然libsql:// / *.turso.io 归类成 turso(注释写明是故意的:归类了才能响亮拒收,而不是静默掉回 SQLite)

拒收本身是对的、也是有来历的(#3276 那类 declared ≠ enforced:CLI 广告了 memory/turso 却没有分派分支,两者都静默变成 SQLite-in-memory)。在 driver 不在本仓的年代,"不在开源分发里"就是拒收的完整理由。现在这个理由没了,接线与否变成一个真正的选择。

Phase A 已做的(仅限真话修复,不改行为):把拒收信息里"ships with the ObjectStack cloud / enterprise distribution, not the open-core CLI"这句已经失真的话,改成"不是 CLI 从 URL 构造的 driver";content/docs/data-modeling/drivers.mdxself-hosting.mdxenvironment-variables.mdx 三处"开源框架不支持 Turso"同样改成"URL 不推断,需显式注册"。抛错行为一字未改storage-driver.test.ts 的四条 pin 全绿。

需要裁定的是接线本身

选项 代价 说明
A. 维持现状libsql:// 继续响亮拒收,只能显式注册) CLI 不新增对 driver 包的依赖;libsql:// 用户必须写 stack config。runtime 的 provisioning 偏好顺序与 CLI 的 URL 推断本来就是两条路径,不接线不算矛盾——只是读起来像。
B. 接进 URL 推断libsql://TursoDriver CLI 新增一条对 @objectstack/driver-turso 的依赖(进而拖上 @libsql/client),或走可选动态 import + 缺包时响亮报错 与 runtime 把 turso 排第一的口径对齐;os start --database libsql://...start.ts:54 的 example 里已经这么写了)真的能跑。

注意 packages/cli/src/commands/start.ts:54examples 里已经写着
start --database libsql://my-db.turso.io --database-auth-token $TURSO_TOKEN ——
照抄这条 example 今天会 exit 1。无论裁定哪个选项,这条 example 都得跟着处理(B 则它成真,A 则它得删或改写)。

⛔ 不要在没有裁定的情况下顺手接:给 CLI 加一条 driver 依赖是公共契约面的变化(安装体积、可选 peer 的形状、libsql:// 从"响亮失败"变成"能连")。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions