有人告诉我,如果在我的分支中进行新迁移并且在db/structure.sql
文件中与master发生合并冲突,我应该按照以下步骤操作。
bundle exec rake db:drop
bundle exec rake db:create
bundle exec rake db:structure:load
git merge master
bundle exec rake db:migrate
如果我想要做的就是对齐db/structure.sql
文件,那么步骤1-3需要什么?通过合并到主人,我没有得到我尚未运行的新迁移,然后通过运行它们,它将更新我的db/structure.sql
?
答案 0 :(得分:3)
你是对的,删除并重新创建数据库以解决db/structure.sql
(或db/schema.rb
中的冲突)是有点荒谬的。您应该能够简单地运行新的迁移并从structure.sql
获取更新的db:migrate
。
db/stucture.sql
文件只是数据库看到的数据库结构(而db/schema.rb
是ActiveRecord在其有限视图中的数据库结构)。如果structure.sql
中存在冲突,则仅表示:
(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
本身存在问题,它们表明数据库出现问题 git 无法直接看到。冲突的解决方案是修复数据库。
答案 1 :(得分:0)
您只需运行bundle exec rake db:structure:dump
即可重新生成db / structure.sql文件。
对于schema.rb,我发现了https://stackoverflow.com/a/3815807/6003161