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

AWS Elastic Beanstalk RAILS_SKIP_MIGRATIONS值异常跳过db:migrate问题

问题根因

你遇到的是2021年10月发布的Amazon Linux 2 Ruby 2.7平台版本的已知缺陷:EB部署阶段的迁移判断脚本逻辑错误,没有校验RAILS_SKIP_MIGRATIONS的实际值,而是只要检测到该变量存在(无论值是true/false/空),就判定为跳过迁移。你在.ebextensions中显式声明了RAILS_SKIP_MIGRATIONS: false,反而触发了这个判断逻辑,导致脚本认为你要跳过迁移。
你在实例上看到的/opt/elasticbeanstalk/deployment/env是应用运行时的环境变量文件,加载时机晚于迁移判断步骤,所以两个场景下的变量值不一致。

修复方案

方案1(最简修复)

直接删除.ebextensions中RAILS_SKIP_MIGRATIONS: false的配置行。该变量的默认值就是false,不显式声明的话变量不存在,迁移判断脚本的非空检测不会触发,即可自动执行迁移。
注意:该版本平台下RAILS_SKIP_ASSET_COMPILATION变量也存在同样的逻辑问题,如果也显式声明了false,建议一同删除。

方案2(显式控制变量)

如果需要根据部署环境动态控制该变量值,可以添加部署前置钩子覆盖部署阶段的变量:

  1. 在项目根目录创建路径.platform/hooks/predeploy/
  2. 新建文件00_fix_migration_flag.sh,内容如下:
#!/bin/bash
# 覆盖部署阶段的迁移开关变量
export RAILS_SKIP_MIGRATIONS=false
  1. 给文件添加可执行权限:chmod +x .platform/hooks/predeploy/00_fix_migration_flag.sh
  2. 重新打包部署即可

方案3(兼容多实例场景)

你当前使用的container_command强制执行迁移的方案也完全可用,建议补充leader_only配置,避免多实例部署时重复执行迁移:

container_commands:
  01_run_db_migrate:
    command: bundle exec rake db:migrate
    leader_only: true
验证方式

部署完成后查看/var/log/eb-engine.log,如果出现Running db:migrate task的日志,说明迁移已正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:07