nest vercel部署坑
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item
背景
数据库迁移,修改了一些后端代码,并同步了数据库数据。
plantScale迁移到vercel在本地测试没问题后发布到vercel环境后,就无法正常调用。页面报错:
This Serverless Function has crashed.

排查
环境变量?
最开始以为是环境变量配置问题,因为使用vercel pull环境变量,环境变量会保存在.vercel里。
但环境变量默认读取的是.env。

本地调试时,每次环境变量修改都需要pull完后,手动copy到.env里。以为线上也会这样,所以尝试修改读取环境变量的文件路径,nest使用@nestjs/config来读取环境变量,通过配置envFilePath修改文件路径。但配置后发布没有任何作用。
synchronize配置!
环境变量无果后,我开始怀疑是不是 Vercel 环境不支持 PostgreSQL 的连接。为了验证这一点,我创建了一个新的 Nest 项目,连接到 PostgreSQL 数据库,并将其部署在 Vercel 上。结果部署后的项目能够正常工作。
接着,我考虑到可能是业务代码导致的问题。因此,我尝试注释掉业务代码并重新部署,但问题依旧存在。
最终,在对比新旧项目的代码时,我发现 TypeORM 的
synchronize
配置项不一致。当我关闭旧项目中的 synchronize
配置并重新部署后就可以了。。。。这个配置会在每次应用程序启动时自动创建数据库架构。猜测vercel做了处理,不允许线上环境修改数据库结构,一旦修改直接报错。