如何批量运行指定文件夹内的所有migration迁移文件
方案可行性评估
你提出的将现有迁移拆分到独立文件夹、按顺序先后执行的方案完全可行,落地时只需要确认两个前提即可:
- 你当前使用的迁移工具支持按指定顺序传入多个迁移目录执行:主流框架的迁移工具基本都支持该能力,例如Laravel可以通过
migrate --path参数按顺序传多个目录路径,Django可以通过配置MIGRATION_MODULES指定多个迁移路径并调整执行顺序 - 旧文件夹内的迁移文件名与数据库
migrations表中已存储的执行记录完全一致:只要满足这个条件,工具执行迁移时会自动跳过所有已执行过的迁移,不会出现重复执行的问题,也不需要修改原有200多条迁移的文件名和数据库记录
该方案落地后,后续新增迁移直接放在新目录即可,完全不需要再手动调整文件名前缀,符合正常开发流程。
更优实现方案
如果你的项目使用的是支持迁移依赖配置的主流框架,还有更轻量、不需要调整目录结构的方案可选:
- 直接为需要最后执行的填充类迁移配置依赖即可:在迁移文件中指定该迁移依赖当前项目最新的结构迁移,迁移工具执行时会自动按照依赖关系调整执行顺序,无需修改文件名、无需调整目录结构,后续新增填充类迁移也只需要配置对应依赖即可。
例如Laravel可在迁移文件中配置$depends属性指定依赖的迁移类,Django可在迁移文件的dependencies列表中添加依赖条目。 - 如果需要区分结构迁移和数据填充迁移,也可以单独建立专用的「数据填充迁移」目录,配置工具在所有结构迁移执行完成后单独执行该目录下的迁移,逻辑比拆分新旧迁移目录更清晰,后续两类迁移分开管理不会混淆。
注意:所有方案落地前都需要先在测试环境执行一次完整的全新迁移流程,验证执行顺序、数据写入结果符合预期后再应用到生产环境。
内容的提问来源于stack exchange,提问作者Lego
相关产品推荐
相关产品推荐

