部署到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
相关产品推荐
相关产品推荐

