将 sveltekit 与 turso 和 drizzle-orm 一起使用,我遇到的唯一类似问题是:https://github.com/tursodatabase/libsql/issues/1121 如果我使用
url: process.env.TURSO_URL!,
,该网站在本地运行良好,它的构建也可以正常工作,但在 vercel 上却失败,我已将我的 .env 文件上传到 vercel。
db.ts
import 'dotenv/config';
import { createClient } from '@libsql/client';
import { drizzle } from 'drizzle-orm/libsql';
import * as schema from './schema';
export const client = createClient({
url: import.meta.env.TURSO_URL!,
authToken: import.meta.env.TURSO_AUTH_TOKEN
});
export const db = drizzle(client, { schema });
毛毛雨.config.ts
import { Config } from 'drizzle-kit';
import 'dotenv/config';
export default {
schema: './src/lib/db/schema.ts',
out: './migrations',
driver: "turso",
dbCredentials: {
url: process.env.TURSO_URL!,
authToken: process.env.TURSO_AUTH_TOKEN
}
} satisfies Config;
完整错误如下:
Error [LibsqlError]: URL_INVALID: The URL is not in a valid format
at parseUri (file:///vercel/path0/node_modules/@libsql/core/lib-esm/uri.js:9:15)
at expandConfig (file:///vercel/path0/node_modules/@libsql/core/lib-esm/config.js:34:17)
at createClient (file:///vercel/path0/node_modules/@libsql/client/lib-esm/node.js:11:26)
at file:///vercel/path0/.svelte-kit/output/server/chunks/db.js:26:16
at ModuleJob.run (node:internal/modules/esm/module_job:222:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
at async Promise.all (index 2)
at async analyse (file:///vercel/path0/node_modules/@sveltejs/kit/src/core/postbuild/analyse.js:66:16)
at async MessagePort.<anonymous> (file:///vercel/path0/node_modules/@sveltejs/kit/src/utils/fork.js:22:16)
Emitted 'error' event on Worker instance at:
at [kOnErrorMessage] (node:internal/worker:326:10)
at [kOnMessage] (node:internal/worker:337:37)
at MessagePort.<anonymous> (node:internal/worker:232:57)
at [nodejs.internal.kHybridDispatch] (node:internal/event_target:826:20)
at MessagePort.<anonymous> (node:internal/per_context/messageport:23:28) {
code: 'URL_INVALID',
rawCode: undefined,
[cause]: undefined
}
好吧,我终于做到了。 我应该分享我正在使用的技术堆栈:Turso、drizzle/drizzle-orm 和 sveltekit。
然后我做了改变
db.ts
import * as schema from './schema';
import 'dotenv/config';
import { type LibSQLDatabase, drizzle } from 'drizzle-orm/libsql';
import { createClient } from '@libsql/client/http';
export function tursoClient(): LibSQLDatabase<typeof schema> {
const url = import.meta.env.VITE_TURSO_URL?.trim();
if (url === undefined) {
throw new Error('TURSO_URL is not defined', url);
}
const authToken = import.meta.env.VITE_TURSO_AUTH_TOKEN?.trim();
if (authToken === undefined) {
if (!url.includes('file:')) {
throw new Error('TURSO_AUTH_TOKEN is not defined');
}
}
return drizzle(
createClient({
url,
authToken
}),
{ schema }
);
}
毛毛雨.config.ts
import type { Config } from 'drizzle-kit';
import * as dotenv from 'dotenv';
dotenv.config();
export default {
schema: './src/lib/db/schema.ts',
out: './migrations',
driver: "turso",
dbCredentials: {
url: process.env.VITE_TURSO_URL as string,
authToken: process.env.VITE_TURSO_AUTH_TOKEN as string,
}
} satisfies Config;
并确保使用前缀
VITE
来命名 .env 变量 https://stackoverflow.com/a/71963325/10537055