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

无法回滚数据库迁移:缺失文件致ActiveRecord错误如何解决?

解决ActiveRecord::UnknownMigrationVersionError问题

问题根源

你的数据库schema_migrations表中仍保留着版本号20221220155010的记录,但对应的create_dogs.rb迁移文件已经随废弃的add_dogs分支被删除,导致Rails回滚时找不到匹配的迁移文件。

解决方案

方案一:直接清理数据库残留记录(最快方式)

  1. 启动Rails控制台:
    rails console
    
  2. 执行SQL删除对应版本记录:
    ActiveRecord::Base.connection.execute("DELETE FROM schema_migrations WHERE version = '20221220155010'")
    
  3. 退出控制台后,重新运行rails db:rollback即可正常回滚add_cats分支的迁移。

方案二:临时恢复迁移文件再回滚(更合规的做法)

如果不想直接操作数据库,可以通过Git临时恢复迁移文件完成回滚:

  1. 查找创建该迁移的Git提交哈希:
    git log --all --grep="create_dogs"
    
  2. 从提交中导出迁移文件到当前分支:
    git show <提交哈希>:db/migrate/20221220155010_create_dogs.rb > db/migrate/20221220155010_create_dogs.rb
    
  3. 回滚指定步数(包含临时恢复的迁移和add_cats的迁移):
    rails db:rollback STEP=2
    
    (注:如果add_cats分支只有一个迁移,STEP=2即可;如果有多个,根据实际迁移数量调整)
  4. 删除临时恢复的迁移文件:
    rm db/migrate/20221220155010_create_dogs.rb
    
  5. 之后db:rollback和db:migrate:redo就能正常使用了。

后续注意事项

  • 执行迁移后要废弃分支时,先在该分支运行db:rollback再删除分支,避免数据库残留迁移记录。
  • 团队协作场景下,新环境初始化推荐使用rails db:schema:load替代db:migrate,确保schema和数据库状态一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:40:29