Vercel 上的 Sveltekit 部署失败,因为错误 [LibsqlError]:URL_INVALID:URL 的格式无效

问题描述 投票:0回答:1

将 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
}
sql sqlite url svelte sveltekit
1个回答
0
投票

好吧,我终于做到了。 我应该分享我正在使用的技术堆栈:Turso、drizzle/drizzle-orm 和 sveltekit。

我遵循了本教程:https://medium.com/chiselstrike/build-a-poll-making-website-using-sveltekit-turso-drizzle-and-deploy-it-to-vercel-eceb37018a2a

然后我做了改变

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

© www.soinside.com 2019 - 2024. All rights reserved.