You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
OS_DATABASE_DRIVER=pg OS_DATABASE_URL=postgres://u:p@localhost:5432/db os start # 认
OS_DATABASE_DRIVER=pg OS_DATABASE_URL=postgres://u:p@localhost:5432/db os migrate plan # 拒(改前:静默 SQLite)
值得注意:仓内已经有一份唯一别名表 —— packages/spec/src/data/driver/config-registry.zod.ts 的 DRIVER_ID_ALIASES / resolveDriverId(共享工厂已经在用它,注释里明确写着「两张表意味着选 driver 的 id 与选 config 契约的 id 可能不一致」)。但它的规范 id 是 mongo(不是 standalone 的 mongodb),且不含turso/libsql(那不是 builtin driver),所以直接复用不是机械替换,需要裁决。
未裁选项:
A standalone enum 收下同一批别名(与 CLI 对齐,词表集中一处);
B 反过来把 CLI 收窄到规范拼写,拒绝时给 rename hint(contract-first 口味,但会打断现有 --database-driver pg 用法);
C 两侧都改读 spec 的 resolveDriverId,并先把 mongodb/turso 的口径补进那张表。
发现于 #6265 的实施(PR #6344)。#6344 的裁决面是「
mysql://识别」+「env 值过 zod enum 真校验」,这三处都不在其中,顺手改等于在未裁的情况下扩/收契约,故另记、未认领。storage-driver 别名、"OS_DATABASE_DRIVER" alias 词表,均 0 命中),其余查询撞上 GitHub search 速率限制。若与既有 issue 重复,请直接关掉。背景
#6344 之后,
OS_DATABASE_DRIVER的未知值在 standalone stack(os migrate/createStandaloneStack/ 嵌入方)会响亮拒绝并列出合法值,不再静默落 SQLite。这消灭了「静默连错库」,但没有让两侧的 explicit-driver 口径一致 —— 下面三条都是「不再静默,但仍不一致」。(1) 别名词表两侧不同
packages/cli/src/utils/storage-driver.tsresolveStorageDefinition)接受:mongodb|mongo、sqlite|sql、sqlite-wasm|wasm-sqlite|wasm、postgres|postgresql|pg、mysql|mysql2、turso|libsql、memory|mingo|in-memory;packages/runtime/src/standalone-stack.tsStandaloneDatabaseDriverSchema,feat(runtime): standalone stack 认mysql://,并对OS_DATABASE_DRIVER做真校验 (#6265) #6344 后)只收规范拼写:sqlite、sqlite-wasm、memory、postgres、mysql、mongodb、turso;content/docs/data-modeling/drivers.mdx的 "Supported Drivers" 表把别名列为OS_DATABASE_DRIVER的合法值(postgres | postgresql | pg、mysql | mysql2、sqlite | sql、…)。后果:
OS_DATABASE_DRIVER=pg(或mysql2/mongo/libsql/wasm-sqlite/mingo/ …)在os start下正常,在os migrate下被拒。改前这条路是静默 SQLite,所以 #6344 是净改善;但同一个环境变量仍有两种答案。复现:
值得注意:仓内已经有一份唯一别名表 ——
packages/spec/src/data/driver/config-registry.zod.ts的DRIVER_ID_ALIASES/resolveDriverId(共享工厂已经在用它,注释里明确写着「两张表意味着选 driver 的 id 与选 config 契约的 id 可能不一致」)。但它的规范 id 是mongo(不是 standalone 的mongodb),且不含turso/libsql(那不是 builtin driver),所以直接复用不是机械替换,需要裁决。未裁选项:
--database-driver pg用法);resolveDriverId,并先把mongodb/turso的口径补进那张表。倾向 C(唯一词表,选 driver 与选 config 契约同一个集合)或 A;但这是公开配置面的取舍,应由维护者裁。
(2) 显式选了「非文件」driver 却没给 URL —— 两侧都不好,方式不同
resolveStorageDefinition('postgres', { databaseUrl: undefined })产出config: { url: undefined },pg于是用它自己的默认值连localhost:5432—— 连到一个操作者从没点名的地方;resolveDatabaseUrl()兜底成file:…/standalone.db,于是 mysql/postgres/mongodb 拿到一个file:开头的 DSN,失败在 driver 里,消息与成因隔了两层。对照:
turso在 CLI 侧已经有 typedUnsupportedDriverError,话说得很到位 ——「选了 turso 却没给 URL,libSQL 没有可猜的默认;退回 SQLite 会静默忽略你要的 driver」。同一句话对 mysql / postgres / mongodb 一字不改都成立。建议:把那条 typed 拒绝推广到所有「无本地默认」的 kind(两侧),而不是各自兜一个错误的默认。
(3)
--database-driver的 help 文案漏项packages/cli/src/commands/start.ts:109与packages/cli/src/commands/dev.ts:102的描述都是Force driver kind: sqlite | turso | postgres | mongodb | memory,漏了mysql与sqlite-wasm—— 两者都能用;content/docs/deployment/cli.mdx:134/:323的表同样漏。而content/docs/deployment/environment-variables.mdx:52列的是全集(含mysql)。三份清单,三种答案。若 (1) 收敛到唯一词表,这条应当顺带由那份词表推导出来,而不是再手写一遍。
未认领。