部署至Dokku测试环境执行migrate遇NodeNotFoundError求助
解决Dokku部署时Wagtail迁移依赖缺失问题
针对部署到Dokku测试环境时执行python manage.py migrate出现的NodeNotFoundError(找不到wagtailcore.0092_query_searchpromotion_querydailyhits迁移节点),按以下步骤排查解决:
1. 确保部署环境与本地依赖版本完全一致
- 检查项目依赖文件(
requirements.txt或pyproject.toml),确认Wagtail版本为精确锁定的wagtail==6.2.2,避免使用>=等版本范围导致Dokku安装了不同小版本的Wagtail。 - 执行Dokku缓存清理与重建,强制重新安装依赖:
dokku repo:purge-cache <你的应用名称> dokku ps:rebuild <你的应用名称>
2. 核对迁移文件的依赖定义
- 打开
generic/migrations/0001_initial.py,查看dependencies列表中的('wagtailcore', '0092_query_searchpromotion_querydailyhits'):- 对比本地Wagtail安装目录下的
wagtailcore/migrations文件夹,确认该迁移文件是否存在。若本地存在但Dokku环境不存在,说明部署环境的Wagtail版本与本地不一致,回到步骤1处理。 - 若依赖是手动误写,修改为当前Wagtail版本中实际存在的迁移节点(比如查看wagtailcore最新迁移的编号)。
- 对比本地Wagtail安装目录下的
3. 手动修复数据库迁移记录(谨慎操作)
如果确认Dokku环境的Wagtail版本正确,但数据库迁移状态异常:
- 连接到Dokku的PostgreSQL数据库:
dokku postgres:connect <你的数据库名称> - 执行SQL添加缺失的迁移记录:
INSERT INTO django_migrations (app, name, applied) VALUES ('wagtailcore', '0092_query_searchpromotion_querydailyhits', NOW()); - 退出数据库后重新执行迁移:
dokku run <你的应用名称> python manage.py migrate
4. 重新生成迁移文件
若迁移文件本身存在版本兼容问题:
- 本地删除
generic/migrations下的所有迁移文件(保留__init__.py):rm generic/migrations/*.py - 重新生成迁移文件:
python manage.py makemigrations generic - 提交新的迁移文件到代码仓库,重新部署到Dokku。
内容的提问来源于stack exchange,提问作者seanpaulharsevoort
相关产品推荐
相关产品推荐

