AWS ElasticBeanStalk部署时01_migrate命令执行失败求助
排查Elastic Beanstalk中Command 01_migrate失败的问题
核心排查方向
当前日志仅提示命令执行失败,未给出具体错误细节,需从以下维度逐步定位:
1. 捕获迁移命令的详细错误输出
修改.ebextensions/db-migrate.config中的命令,将迁移日志重定向到文件,获取具体报错信息:
container_commands: 01_migrate: command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate >> /var/log/migrate_detail.log 2>&1" leader_only: true
重新部署后,登录EC2实例查看/var/log/migrate_detail.log,文件中会包含migrate命令的具体失败原因(如数据库连接失败、迁移文件语法错误等)。
2. 验证虚拟环境路径有效性
EB的虚拟环境路径可能因平台更新或部署环境变化出现差异,可通过两种方式修正:
- 登录实例查看实际虚拟环境路径:
ls /var/app/venv/,将命令中的*替换为实际目录名 - 使用动态查找命令确保激活正确的虚拟环境:
container_commands: 01_migrate: command: "find /var/app/venv -name activate | head -1 | xargs source && python3 manage.py migrate" leader_only: true
3. 排查数据库连接问题
- 通过
eb printenv查看当前环境变量中的数据库配置(DB_HOST、DB_USER、DB_PASSWORD等)是否正确 - 检查EC2实例安全组是否允许访问RDS实例,RDS安全组是否开放对应IP段的访问权限
- 登录实例后手动测试数据库连接:
source /var/app/venv/*/bin/activate python3 manage.py dbshell # 尝试直接连接数据库
4. 确认Python依赖完整性
查看依赖安装日志/var/log/eb-engine.log,检查是否有依赖包安装失败的记录。登录实例后,在虚拟环境中验证核心依赖:
source /var/app/venv/*/bin/activate pip list | grep -E "Django|psycopg2|mysqlclient" # 确认数据库驱动和Django版本匹配
5. 检查迁移文件合法性
在本地执行python manage.py migrate --check,确认迁移文件无语法错误或版本冲突。若本地验证正常,可重新打包迁移文件部署,或在实例上手动执行迁移命令排查问题。
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

