如何解决 Rails 与 db/structure 的合并冲突。sql

How to solve Rails merge conflicts with db/structure.sql

有人告诉我,如果在我的 b运行ch 中进行新的迁移并且与 db/structure.sql 文件中的 master 发生合并冲突,我应该按照以下步骤操作。

  1. 在b运行ch中,bundle exec rake db:drop
  2. 在b运行ch中,bundle exec rake db:create
  3. 硕士,bundle exec rake db:structure:load
  4. 在b运行ch中,git merge master
  5. 在b运行ch中,bundle exec rake db:migrate

如果我只想对齐 db/structure.sql 文件,那么第 1-3 步需要什么?通过在 master 中合并,难道我没有得到新的迁移,我还 运行 然后通过 运行 它们,它会更新我的 db/structure.sql?

您是对的,删除并重新创建数据库以解决 db/structure.sql(或 db/schema.rb 中的冲突)有点荒谬。您应该能够简单地 运行 新迁移并从 db:migrate.

获得更新的 structure.sql

db/stucture.sql 文件只是数据库所见的数据库结构(而 db/schema.rb 是 ActiveRecord 有限视图中的数据库结构)。如果 structure.sql 中存在冲突,则仅表示:

  1. 合并涉及更改数据库结构的新迁移。
  2. 您要合并的分支有 运行 不同顺序的迁移,因此模式并不完全匹配,即使它们在功能上可能相同。

(1) 通过 运行 新迁移解决,并可能修复迁移本身存在冲突的任何地方。快速 bin/rake db:migrate 应该可以解决这个问题,并为您留下一个新的无冲突 db/structure.sql.

(2)同理求解。您也可以手动 bin/rake db:structure:dump 重建 db/structure.sql,但只有当您确定自己确实遇到这种情况时才会这样做;但实际上,db:migrate 会处理它,所以没有理由不只是 db:migrate.

db/structure.sql(或db/schema.rb)中的冲突并不表示 db/structure.sql 本身存在问题,它们表示 [=49] 的数据库存在问题=] 不能直接看到。解决冲突的方法是修复数据库。

您可以 运行 bundle exec rake db:structure:dump 重新生成 db/structure.sql 文件。

对于 schema.rb 我找到了