Gunicorn重启后未加载Django代码变更,延迟生效问题求助
确认Gunicorn进程彻底重启
不要仅依赖systemctl restart gunicorn,先检查是否有旧进程残留:ps aux | grep gunicorn如果看到未终止的旧进程,直接强制杀死:
pkill -f gunicorn再重启Gunicorn服务。同时检查systemd配置文件(通常在
/etc/systemd/system/gunicorn.service),确保ExecStart指向的是正确的虚拟环境和项目入口文件,避免启动了旧版本代码。禁用Django模板缓存(DEBUG=False场景)
生产环境下DEBUG=False会自动启用模板缓存,导致HTML变更不生效。临时修改settings.py关闭模板缓存:TEMPLATES[0]['OPTIONS']['loaders'] = [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ]调试完成后建议改回缓存模式(使用
cached.Loader)以保证性能。验证数据库迁移执行状态
执行命令检查是否有未应用的迁移:python manage.py migrate --check若存在未应用项,重新执行
python manage.py migrate并查看输出日志,确认迁移无报错。同时直接登录数据库,验证表结构或数据是否已更新。排查Nginx动态请求缓存
检查Nginx配置文件(通常在/etc/nginx/sites-available/your-project.conf),查看是否针对动态请求配置了proxy_cache或fastcgi_cache。如果有缓存配置,临时注释后重启Nginx,或手动清理Nginx缓存目录:rm -rf /var/cache/nginx/*检查GCP层面的缓存机制
如果实例搭配了Cloud CDN或HTTP(S)负载均衡,可能会缓存动态内容:- 登录GCP控制台,检查是否启用了Cloud CDN,若有则手动刷新缓存
- 确认负载均衡器的缓存规则,是否对动态页面(如
.html、视图接口)设置了缓存
核对代码部署路径
确认推送代码的目录与Gunicorn启动时指向的目录完全一致,避免代码推送到了错误路径。同时检查虚拟环境是否正确激活,项目依赖是否与本地开发环境同步。
内容的提问来源于stack exchange,提问作者Xceptions

