You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Vercel的Flask应用出现404错误,求排查方案

Flask部署Vercel出现404错误的解决方案

核心问题分析

  1. Vercel不支持WebSocket:你的应用使用了Flask-SocketIO,但Vercel的Serverless Functions架构不支持WebSocket长连接,这不仅会导致实时聊天功能失效,还可能干扰路由正常解析。
  2. 文件路径配置错误:app.py中指定的静态文件和模板文件路径不正确,导致Flask无法找到资源。
  3. vercel.json配置不符合Vercel的Serverless规范:路由和构建规则配置错误,Vercel无法正确识别Flask应用入口。

具体修复步骤

1. 调整Flask应用路径配置

假设你的文件结构是根目录下包含api/、static/、templates/三个文件夹(app.py在api/内),修改app.py中的Flask初始化代码:

# 原代码
app = Flask(__name__, static_folder='../../static', template_folder='../../templates')

# 修改为
app = Flask(__name__, static_folder='../static', template_folder='../templates')

2. 适配Vercel的WSGI规范

Vercel部署Python应用需要导出WSGI应用对象,修改app.py的入口部分:

# 原代码
if __name__ == '__main__':
    port = int(os.environ.get('PORT', 3000))
    socketio.run(app, host='0.0.0.0', port=port)

# 修改为
# 导出WSGI应用供Vercel调用
application = app

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 3000))
    socketio.run(app, host='0.0.0.0', port=port)

3. 修正vercel.json配置

替换原配置为符合Vercel Python部署规范的内容:

{
  "builds": [
    {
      "src": "api/app.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "api/app.py"
    }
  ]
}

说明:Vercel会自动处理静态资源请求,无需单独配置static/templates的路由规则。

4. 处理SocketIO兼容性问题

由于Vercel不支持WebSocket,实时聊天功能无法正常运行,有两种解决方式:

  • 更换部署平台:选择支持WebSocket的平台(如Render、Heroku、AWS EC2)部署应用。
  • 替换实时方案:改用Pusher、Ably等第三方实时服务替代Flask-SocketIO。

5. 检查MongoDB连接配置

将硬编码的MongoDB连接字符串替换为Vercel环境变量:

  1. 在Vercel项目的"Settings" → "Environment Variables"中添加MONGO_URI,值为你的MongoDB连接字符串。
  2. 修改app.py中的连接代码:
# 原代码
client = pymongo.MongoClient("u thought lol")

# 修改为
import os
client = pymongo.MongoClient(os.environ.get('MONGO_URI'))

部署验证

完成上述修改后,重新推送代码到Vercel,等待部署完成后访问应用地址,即可解决404错误(实时聊天功能需按上述方案调整后才能正常使用)。

内容的提问来源于stack exchange,提问作者Avyukt Ballari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:27:50