Vercel部署Django项目遇404及静态文件失效问题求助
解决Vercel部署Django后静态文件加载失败的方案
1. 核对Django静态文件核心配置
在settings.py中确认以下配置无误:
- 强制设置
DEBUG = False(Vercel生产环境下调试模式会导致静态文件处理逻辑异常) - 保留
STATIC_URL = '/static/' - 配置静态文件收集目录:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')(如果是Django 3.1+,也可以用BASE_DIR / 'staticfiles') - 确保
INSTALLED_APPS中包含'django.contrib.staticfiles' - 若项目静态文件存放在自定义目录(如根目录下的
static/),添加目录映射:STATICFILES_DIRS = [ BASE_DIR / "static", ]
2. 正确配置Whitenoise中间件
已安装Whitenoise的前提下,重点调整中间件顺序和存储配置:
- 在
settings.py的MIDDLEWARE列表中,将WhiteNoiseMiddleware放在SecurityMiddleware之后、CommonMiddleware之前:MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 其余中间件按原有顺序保留 ] - 在
settings.py末尾添加静态文件存储规则:STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
3. 调整Vercel路由与构建配置(vercel.json)
确保Vercel能正确识别静态文件和Django服务路由,配置示例如下:
{ "builds": [ { "src": "你的Django项目目录/wsgi.py", "use": "@vercel/python", "config": { "maxLambdaSize": "15mb", "runtime": "python3.10" } }, { "src": "staticfiles/**", "use": "@vercel/static" } ], "routes": [ { "src": "/static/(.*)", "dest": "/staticfiles/$1" }, { "src": "/(.*)", "dest": "你的Django项目目录/wsgi.py" } ] }
注意:将你的Django项目目录替换为实际存放wsgi.py的文件夹名称(比如仓库中的railgunglm)
4. 完善构建脚本(build.sh)
确保构建过程中执行静态文件收集操作,脚本内容如下:
#!/bin/bash pip install -r requirements.txt python manage.py collectstatic --noinput
同时确认requirements.txt中已包含whitenoise及所有项目依赖包。
5. 排查构建日志与静态文件访问
- 部署后查看Vercel构建日志,确认
collectstatic命令是否成功执行、是否有静态文件被收集到staticfiles目录 - 尝试直接访问静态文件URL(如
https://你的Vercel域名/static/css/main.css),若返回404,检查STATIC_ROOT路径与vercel.json路由规则是否匹配
内容的提问来源于stack exchange,提问作者GL Mak
相关产品推荐
相关产品推荐

