You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

自动触发Cron任务时Next.js端点失败,手动触发正常求助

排查思路:Vercel Next.js Serverless函数定时触发数据库连接失败(手动正常)

以下是针对性的排查方向,按优先级排序:

  • 验证数据库IP白名单
    报错显示无法连接AWS RDS地址(Heroku Postgres底层依赖RDS),手动触发使用的是你的本地IP(已在白名单),而EasyCron自动请求来自其服务器IP。若部分EasyCron出口IP未加入数据库白名单,就会出现部分Cron任务成功、部分失败的情况。去EasyCron后台获取所有出口IP段,逐一添加到Heroku数据库的IP访问规则中。

  • 清理Vercel函数实例缓存
    Vercel Serverless函数的冷启动实例可能缓存了更新前的数据库凭证。手动触发大概率调度到新部署的实例,而自动Cron可能命中旧实例。解决方式:

    1. 在Vercel后台强制重新部署应用,勾选「Skip Cache」选项
    2. 修改Prisma初始化逻辑,确保每次函数启动时重新读取环境变量并初始化客户端,避免复用旧连接配置
  • 核对EasyCron任务的请求配置
    即使重建了Cron任务,也要逐一检查失败任务的请求细节:

    • 确认请求URL无旧查询参数(比如残留的旧凭证信息)
    • 检查请求头是否与手动触发一致(浏览器会自动携带部分头,EasyCron需手动配置)
    • 关闭EasyCron任务的「缓存请求内容」选项,避免复用旧请求配置
  • 检查Prisma配置的动态加载
    确保schema.prisma中的DATABASE_URL是通过环境变量引用(如env("DATABASE_URL")),而非构建时硬编码的固定字符串。若构建时硬编码旧地址,后续更新环境变量也无法覆盖已构建的函数实例。

  • 调整连接超时与网络节点
    EasyCron服务器与eu-west-1区域RDS的跨区域网络可能存在延迟,导致连接超时:

    • schema.prisma中设置connect_timeout = 30(单位秒),延长连接超时时间
    • 查看EasyCron是否支持选择靠近eu-west-1的节点,减少网络传输延迟

内容的提问来源于stack exchange,提问作者Loïc Boset

火山引擎 最新活动