一键部署Payload Website Starter时如何修复DrizzleQueryError?
部署Vercel Payload Website Starter模板时的数据库连接错误
使用Vercel的Payload Website Starter一键部署模板,所有连接字符串已自动添加,但部署时出现以下错误。尝试过重新部署、更新环境变量,模板本应无需手动修改代码即可运行,问题仍未解决。
错误日志:
DrizzleQueryError: Failed query: SELECT to_regclass('"payload_migrations"') AS exists; params: at NodePgPreparedQuery.queryWithCache (/vercel/path0/node_modules/src/pg-core/session.ts:74:11) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async migrationTableExists (/vercel/path0/node_modules/@payloadcms/drizzle/src/utilities/migrationTableExists.ts:27:18) at async Object.migrate (/vercel/path0/node_modules/@payloadcms/drizzle/src/migrate.ts:37:29) at async migrate (/vercel/path0/node_modules/payload/src/bin/migrate.ts:87:7) at async runBinScript (/vercel/path0/node_modules/payload/dist/bin/index.js:112:9) at async bin (/vercel/path0/node_modules/payload/dist/bin/index.js:45:29) at async start (file:///vercel/path0/node_modules/payload/bin.js:30:7) { query: `SELECT to_regclass('"payload_migrations"') AS exists;`, params: [], cause: ErrorEvent { [Symbol(kTarget)]: WebSocket { _events: [Object: null prototype] { error: [Function: onError] { [Symbol(kIsForOnEventAttribute)]: false, [Symbol(kListener)]: [Function (anonymous)] }, message: [Function: onMessage] { [Symbol(kIsForOnEventAttribute)]: false, [Symbol(kListener)]: [Function (anonymous)] }, close: [Function: onClose] { [Symbol(kIsForOnEventAttribute)]: false, [Symbol(kListener)]: [Function (anonymous)] }, open: [Function: onOpen] { [Symbol(kIsForOnEventAttribute)]: false, [Symbol(kListener)]: [Function: handleWebSocketOpen] } }, _eventsCount: 4, _maxListeners: undefined, _binaryType: 'arraybuffer', _closeCode: 1006, _closeFrameReceived: false, _closeFrameSent: false, _closeMessage: Buffer(0) [Uint8Array] [], _closeTimer: null, _errorEmitted: true, _extensions: {}, _paused: false, _protocol: '', _readyState: 3, _receiver: null, _sender: null, _socket: null, _bufferedAmount: 0, _isServer: false, _redirects: 0, _autoPong: true, _url: 'wss://localhost/v2', _req: null, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false }, [Symbol(kType)]: 'error', [Symbol(kError)]: Error: connect ECONNREFUSED 127.0.0.1:443 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 443 }, [Symbol(kMessage)]: 'connect ECONNREFUSED 127.0.0.1:443' } }
问题分析
从日志里的connect ECONNREFUSED 127.0.0.1:443和WebSocket地址wss://localhost/v2可以看出,程序在尝试连接本地443端口,但Vercel部署环境中没有本地数据库实例,说明数据库连接配置存在异常。
排查步骤
- 核对
DATABASE_URL环境变量:确认是否正确指向远程数据库(如Vercel Postgres),检查是否有拼写错误、缺失sslmode=require这类必要参数 - 确认数据库状态:检查远程数据库实例是否正常运行,是否开放了Vercel部署环境的访问权限
- 检查配置文件:查看项目中的
payload.config.ts或drizzle.config.ts,是否存在硬编码的本地连接地址,覆盖了环境变量 - 验证环境变量生效:在Vercel部署控制台中强制触发重新构建,确保新的环境变量被加载
- 检查数据库权限:确认数据库是否允许Vercel的IP段访问,是否需要配置SSL连接
内容的提问来源于stack exchange,提问作者Lahiru Lanka Rathnayaka
相关产品推荐
相关产品推荐

