Heroku部署的Django应用代码未更新问题排查求助
问题描述
- 部署环境:Django博客托管于Heroku,静态资源存储在S3 Bucket
- 异常现象:在注册表单模板中添加隐私政策说明段落后,本地代码已更新,且通过Heroku bash确认生产环境代码正确,但前端页面未显示新增内容
- 已执行操作:运行
collectstatic、重启dyno、通过Heroku GUI重新部署master分支,代码仓库已同步
排查与解决方案
1. 清理Django模板缓存
生产环境下Django默认启用模板缓存,即便代码更新,缓存的旧模板仍会被渲染:
- 临时关闭模板缓存测试(修改
settings.py):TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': False, # 需设为False才能自定义loaders 'OPTIONS': { # 注释缓存加载器,改用非缓存版本 # 'loaders': [ # ('django.template.loaders.cached.Loader', [ # 'django.template.loaders.filesystem.Loader', # 'django.template.loaders.app_directories.Loader', # ]), # ], 'loaders': [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], }, }, ] - 部署后执行缓存清理命令:
heroku run python manage.py clearcache
测试完成后建议重新开启缓存,避免影响性能。
2. 处理S3静态资源缓存
S3默认会为静态资源设置缓存策略,可能导致旧资源未被替换:
- 重新执行静态资源收集,确保无报错:
heroku run python manage.py collectstatic --noinput - 调整S3缓存控制参数(修改
settings.py):AWS_S3_OBJECT_PARAMETERS = { 'CacheControl': 'max-age=3600', # 缩短缓存时间,测试时可设为0 } - 手动在S3控制台删除对应旧静态文件,或给静态资源添加版本标识(如模板中引用
style.css?v=2)
3. 跳过浏览器本地缓存
- 强制刷新页面:Windows/Linux按
Ctrl+Shift+R,Mac按Cmd+Shift+R - 打开Chrome开发者工具(F12),在「Network」标签勾选「Disable cache」,重新加载页面查看效果
4. 验证模板与渲染逻辑
- 通过Heroku bash确认模板文件路径与内容:
heroku run cat path/to/your/templates/registration/signup.html # 替换为实际模板路径 - 检查视图函数是否存在条件渲染逻辑(如仅对特定用户显示该段落)
- 查看Django日志排查渲染错误:
heroku logs --tail
内容的提问来源于stack exchange,提问作者Hans Freizeit
相关产品推荐
相关产品推荐

