Nginx部署的Django应用修改.py文件后运行无更新如何解决
问题排查与解决方案
你反复重启Nginx的操作无法解决问题的核心原因是:Nginx本身不运行任何Python代码,它仅负责处理静态资源、转发动态请求到后端的Django应用容器,py文件的改动需要重启实际运行Django的进程才会生效。
1. 优先重启Django应用容器进程
Django 1.7 + Python 2的部署环境常用的应用容器为uWSGI或Gunicorn,按你实际使用的组件执行重启操作:
- 若使用uWSGI:如果是系统服务托管,执行
service uwsgi restart;如果是supervisor托管,执行supervisorctl restart 你的uWSGI进程名 - 若使用Gunicorn:直接杀死原有Gunicorn进程后重新运行启动命令即可
- 若用的是其他进程托管工具,执行对应工具的进程重启命令即可
绝大多数情况下完成这一步就能解决py文件改动不生效的问题。
2. 校验代码路径一致性
如果重启应用容器后仍不生效,需要确认你修改的代码目录和应用实际加载的目录一致:
- 查看uWSGI/Gunicorn的配置文件,找到
chdir参数对应的项目根目录,确认和你修改的views.py所在目录是否完全匹配,避免出现多版本代码目录并存、同步代码传错路径的问题 - 可以在你修改的views.py对应视图函数中加入一行日志打印代码,比如
print "测试代码加载",重启应用进程后触发一次对应页面的请求,查看应用容器的运行日志中是否有对应输出,确认代码是否被进程加载
3. 排查缓存与权限问题
- 确认Django配置文件
settings.py中的DEBUG参数,如果DEBUG = False,Django默认不会自动热加载代码,必须重启应用进程才会加载新代码 - 确认你手动执行
python -m compileall用的Python版本,和应用容器运行时用的Python 2版本完全一致,避免多版本环境下编译的pyc文件不匹配 - 检查项目目录的权限,确认应用容器的运行用户对项目目录有读写权限,权限不足会导致无法生成新的pyc文件,代码改动不生效
4. 排查服务端缓存配置
如果上述操作都完成后仍有问题,检查是否开启了Django服务端缓存:
- 查看
settings.py中的CACHES配置项,是否配置了Redis、Memcached等缓存后端,是否开启了全站缓存、对应视图的单独缓存 - 可以临时在视图中新增一个随机返回的参数,重启进程后多次请求看返回结果是否变化,排除缓存返回旧内容的问题
内容的提问来源于stack exchange,提问作者Spoonbendr
相关产品推荐
相关产品推荐

