AWS Elastic Beanstalk中Django迁移执行失败问题求助
解决Elastic Beanstalk Django迁移未生效及捕获migrate输出的问题
一、捕获migrate命令的完整输出
当前脚本中migrate命令的输出未被记录到eb-hooks.log,可通过以下修改让所有输出(包括错误信息)都写入日志:
修改.platform/hooks/predeploy/01_migrate_pre.sh脚本:
source /var/app/venv/staging-LQM1lest/bin/activate echo "Running migrations predeploy" # 增加--verbosity 2获取详细执行信息,2>&1将错误输出重定向到标准输出 python /var/app/staging/manage.py migrate --verbosity 2 2>&1 python /var/app/staging/manage.py showmigrations echo "finished migrations"
修改后eb-hooks.log会包含migrate的完整执行日志,比如迁移失败原因、是否找到待执行迁移等关键信息。
二、修复迁移未生效的核心问题
你的脚本中使用了/var/app/current/manage.py,但Elastic Beanstalk的predeploy钩子执行时机是在新版本代码解压到/var/app/staging后,还未将其切换为current之前。此时current目录仍是旧版本代码,新迁移文件(如0028_alter_sideeffect_se_name)仅存在于staging目录中,因此用current的manage.py无法找到并执行新迁移。
解决方法是将脚本中所有/var/app/current替换为/var/app/staging,如上面的脚本示例。
额外排查点
若修改路径后仍有问题,可通过捕获的日志进一步排查:
- 检查数据库连接:确认EB环境的数据库配置(如
RDS_HOSTNAME、RDS_USERNAME等环境变量)是否正确传递给Django - 检查迁移文件依赖:确认
0028迁移是否依赖未执行的其他迁移,或存在命名/语法错误 - 检查权限:确保
webapp用户对staging目录和数据库有足够操作权限
内容的提问来源于stack exchange,提问作者RobMcC
相关产品推荐
相关产品推荐

