You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS环境下Django执行makemigrations后migrate无生效问题求助

解决AWS EB部署Django时自动生成的迁移文件无法应用到RDS的问题

问题根源

你的项目.gitignore规则排除了products/migrations/目录下除__init__.py外的所有文件,AWS Elastic Beanstalk部署时只会同步Git仓库中存在的文件。虽然container_commands里的makemigrations能在容器内临时生成迁移文件,但后续migrate执行时,这些临时文件无法被正确识别,导致提示"No migrations to apply.",RDS数据表无变化。

解决方案

方案一:调整.gitignore规则(推荐规范做法)

  1. 打开项目根目录的.gitignore文件,找到针对migrations的忽略规则,把原来的:
    products/migrations/*.py
    !products/migrations/__init__.py
    
    修改为只忽略编译后的pyc文件:
    products/migrations/*.pyc
    
  2. 把本地已有的迁移文件(包括刚生成的Category111相关迁移)提交到Git仓库:
    git add products/migrations/
    git commit -m "Add migration files for Category111"
    git push
    
  3. 重新部署到EB,此时migrate命令会直接读取Git同步过来的迁移文件,正常应用到RDS。

方案二:优化container_commands配置

如果暂时不想提交迁移文件到Git,可以调整EB配置,确保makemigrations生成的文件能被migrate正确读取:
修改.ebextensions/10_django.config中的container_commands:

container_commands:
  01_makemigrations:
    command: "python manage.py makemigrations products --noinput --settings=config.settings.production"
    leader_only: true
    cwd: "/opt/python/current/app"
  02_migrate:
    command: "python manage.py migrate --noinput --settings=config.settings.production"
    leader_only: true
    cwd: "/opt/python/current/app"
  • leader_only: true:确保只有主实例执行迁移,避免多实例同时操作数据库冲突
  • cwd:指定命令执行的工作目录为项目根目录,确保migrate能找到刚生成的迁移文件

验证方法

  1. 部署完成后,查看EB实例的cfn-init-cmd.log,确认migrate步骤输出类似"Applying products.000x_create_category111... OK"
  2. 登录RDS PostgreSQL,执行以下SQL验证:
    -- 查看迁移记录
    SELECT * FROM django_migrations WHERE app = 'products';
    -- 查看是否生成目标表
    SELECT * FROM products_category111 LIMIT 1;
    

内容的提问来源于stack exchange,提问作者Newb_newb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:35:22