Python项目中gunicorn服务器无法识别源代码修改的原因是什么?
路由修改后重启gunicorn仍不生效的常见诱因排查
文件同步&目录匹配问题
- 远程编辑同步失效:如果使用VSCode Remote-SSH编辑远程Linux服务器文件,可能存在本地缓存未实际写入远程磁盘的问题,可直接在服务器终端执行
cat 你修改的路由配置文件路径,核对内容是否为你修改后的版本。 - Git分支/提交问题:如果部署流程包含自动拉取Git仓库代码的逻辑,可能你本地修改后未提交推送,或是服务器端拉取了其他分支的代码覆盖了本地修改,可在项目目录执行
git status、git log核对当前版本。 - 目录不匹配:服务器可能存在多份项目副本,你修改的目录并非gunicorn实际加载的运行目录。执行
ps aux | grep gunicorn查看gunicorn启动参数中的工作目录,与你修改的目录核对是否一致。
虚拟环境(VirtualEnv)相关问题
- gunicorn运行环境不符:gunicorn的启动脚本可能绑定了其他虚拟环境的解释器,代码加载路径指向了其他位置。执行
readlink /proc/$(pgrep gunicorn)/exe查看gunicorn使用的Python解释器路径,确认和你预期的虚拟环境Python路径一致。 - 项目被安装到虚拟环境依赖中:如果你之前执行过
pip install将该项目安装到了虚拟环境的site-packages中,Python会优先加载依赖目录下的项目代码,而非你修改的本地目录代码。可执行pip list | grep 你的项目名确认是否存在已安装的包,卸载后再重启gunicorn验证。
gunicorn本身配置&启动问题
- 重启未完全生效:你可能只重启了部分gunicorn工作进程,或是重载操作未生效。建议先执行
pkill gunicorn终止所有相关进程,再重新启动gunicorn,查看启动日志确认无报错。 - 预加载配置导致代码未更新:如果gunicorn配置文件中开启了
preload_app = True,主进程会在fork工作进程前就提前加载全部应用代码,仅重启工作进程不会加载新代码,必须完全重启整个gunicorn主进程才会生效。 - 路由配置本身未生效:如果新路由优先级低于已有冲突路由,或是路由配置文件未被项目入口文件正确导入,也会看起来修改不生效。可临时在新路由对应的视图函数中加入打印日志,重启后调用路由查看是否有对应日志输出,确认代码是否被实际加载。

内容的提问来源于stack exchange,提问作者BeeWay Inc
相关产品推荐
相关产品推荐

