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

部署到Vercel的Flask Blueprint API无法访问问题求助

问题:部署带Blueprint的Flask API到Vercel后/api/*路由无法访问

按照Vercel官方Flask模板部署后,使用vercel dev测试时,根路径/和/about可正常访问,但注册了url_prefix='/api'的Blueprint路由(/api/*)返回内部服务器错误。

当前vercel.json配置:

{
    "routes": [
        {
            "src": "/(.*)",
            "destination": "/api/index"
        }
    ]
}

Flask应用核心代码(位于api/index.py):

import datetime as dt

from apscheduler.events import EVENT_JOB_ERROR
from flask import Flask
from flask_apscheduler import APScheduler
from scheduler_config import Config
from tracking_utils import error_listener
from api.routes import api_bp
from all_scripts.scripts_utils import refresh_disabled_jobs_file

app = Flask(__name__)
app.config.from_object(Config)
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True

scheduler = APScheduler()
scheduler.init_app(app)
scheduler.add_listener(error_listener, EVENT_JOB_ERROR)
scheduler.start()

# 注册API蓝图,前缀/api
app.register_blueprint(api_bp, url_prefix='/api')

refresh_disabled_jobs_file()

@app.route('/')
def home():
    return 'Hello, World!'

@app.route('/about')
def about():
    return 'About'

解决方案

1. 修正vercel.json路由配置

Vercel的路由需要确保所有请求正确转发到Flask入口文件,同时保留完整的请求路径供Flask路由匹配。将vercel.json修改为:

{
  "routes": [
    {
      "src": "/(.*)",
      "destination": "/api/index.py"
    }
  ]
}

注:显式指定.py后缀可避免Vercel对serverless函数路径的识别歧义。

2. 确保依赖完全声明

内部服务器错误最常见的原因是部署环境缺少依赖包。在项目根目录创建requirements.txt,列出所有需要的包:

Flask==2.3.3
Flask-APScheduler==1.12.4
# 补充项目用到的其他第三方依赖

3. 检查Flask应用的导出

Vercel要求Python serverless函数导出WSGI应用对象。在api/index.py末尾添加:

# 确保Vercel能识别到Flask应用
application = app

Vercel会优先查找application或app作为入口对象,显式导出可避免识别问题。

4. 排查Blueprint路由定义

确认api/routes.py中的Blueprint路由定义正确,避免重复添加前缀:

from flask import Blueprint

api_bp = Blueprint('api', __name__)

@api_bp.route('/users')  # 对应完整路径/api/users
def get_users():
    return {'users': []}

如果在Blueprint路由中重复写/api,会导致实际路径变为/api/api/xxx,引发404或错误。

5. 替代免费部署平台方案

如果Vercel的serverless模式适配有问题,可考虑以下免费平台:

  • Render:支持完整Flask应用部署(非serverless),直接关联GitHub仓库,自动安装依赖,适合带定时任务的应用。
  • Railway:提供免费额度的容器化部署,支持Flask后台进程运行,适配APScheduler这类定时任务。
  • Fly.io:免费额度内可部署小型Flask应用,采用容器化方式,支持长期运行服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:30:32