使用CLI部署Django至AWS EB时首次无法识别新迁移文件求助
解决AWS Elastic Beanstalk首次部署无法识别Django迁移文件的问题
这问题我之前踩过一模一样的坑!核心原因是你的container_commands配置里,迁移命令的执行逻辑有小问题,导致首次部署时EB找不到你的迁移文件,第二次部署时因为实例上已经缓存了代码,才正常识别。
问题分析
你当前的01_migrate用的是全局的django-admin.py migrate命令,但EB的首次部署流程中,这个命令会碰到两个关键问题:
- 全局
django-admin无法自动定位到你的Django项目的settings.py,自然检测不到app下的迁移文件 - 命令执行的默认工作目录不是你的项目根目录(
ras-server,也就是manage.py所在的目录),导致找不到迁移文件的存放路径
而你的02_collectstatic用的是项目内的manage.py,路径逻辑是对的,所以这个命令每次都能正常执行,但迁移命令因为路径问题首次失败。
修正方案
你只需要把迁移命令改成和collectstatic一致的逻辑,确保用项目内的manage.py执行,并且明确指定工作目录(更稳妥):
修改后的container_commands配置
container_commands: 01_migrate: command: "python manage.py migrate" leader_only: true cwd: "/opt/python/current/app/ras-server" # 指定manage.py所在的项目根目录 02_collectstatic: command: "python manage.py collectstatic --noinput" cwd: "/opt/python/current/app/ras-server"
关键调整点
- 替换命令:把
django-admin.py migrate改成python manage.py migrate,manage.py会自动加载项目根目录下的settings.py,确保能找到你的app和对应的迁移文件 - 明确工作目录:添加
cwd参数指定命令执行的路径为你的项目根目录,避免EB默认工作目录不对导致的路径混乱
额外验证(可选)
如果修改后还是有问题,可以查看EB实例的部署日志,确认两个细节:
container_commands执行时的工作目录是否和你指定的一致- 迁移命令执行时有没有抛出“找不到settings”或“无可用迁移文件”的具体错误
这样调整后,首次部署时EB就能正确识别到迁移文件,不用再重复部署两次了!
内容的提问来源于stack exchange,提问作者Andrii
相关产品推荐
相关产品推荐

