Django迁移异常:Celery任务中出现已删字段不存在错误
问题分析与解决方案
核心原因
Celery Worker进程未重启,仍加载着旧版本的模型代码,导致查询时试图访问已删除的数据库列initial_credit_balance。
而Django Shell每次启动都会重新加载最新代码,这就是两者表现不一致的关键。
具体解决步骤
1. 重启Celery Worker容器
在Docker-compose环境下,直接重启Celery服务即可加载最新代码:
docker-compose restart celery
如果是通过docker-compose up启动的,也可以先停止再重新启动:
docker-compose stop celery docker-compose up -d celery
2. 验证问题是否解决
重启后触发对应Celery任务,检查是否仍出现ProgrammingError报错。若问题依旧,可进一步排查:
- 确认Celery容器挂载的代码卷是否为最新版本(避免Docker缓存旧代码)
- 若代码是打包进镜像而非挂载卷,需重新构建Celery镜像:
docker-compose build celery docker-compose up -d celery
3. 后续预防措施
后续代码更新(尤其是模型字段变更)后,必须同步重启Celery Worker——因为Celery Worker是长驻进程,不会像Django开发服务器那样自动重载代码。
内容的提问来源于stack exchange,提问作者codego
相关产品推荐
相关产品推荐

