为什么schema.rb在运行rake db:migrate时会发生变化(在Git眼中)?

ers*_*ner 9 migration git ruby-on-rails

我知道这是一个小小的将军,但它一直困扰着我.我一直在使用Git远程处理大量的rails项目,每次我做一个git pull并且看到有某种数据更改(迁移或schema.rb更改)我做了rake db:migrate.

这些通常运行正常,我可以继续工作.但是,如果你做了一个git pull然后git status,你的工作目录是干净的(显然)然后做一个rake db:migrate(显然有更改)和另一个git status,突然你的db/schema.rb已经改变.我一直在做一个git checkout立即重置回schema.rb文件的最新提交版本,但为什么这是必要的?!什么是铁路?更新时间戳?我似乎无法弄清楚差异是什么,但也许我只是错过了一些东西?

x1a*_*1a4 10

架构使机器能够rake db:schema:load在第一次设置时运行,而不必运行迁移,如果模型被重命名或删除,它可能会过时.它应该在迁移后更新,并且您总是希望最新版本检入源代码管理.


Ste*_*eve 5

转储中属性的顺序反映了数据库中属性的顺序,如果一个人一直在本地玩迁移,手动向前和向后运行它们,并且编辑内容以使它们只是这样,则可能会失去同步.可以创建一个状态,其中推送器schema.rb中的属性顺序与其他人在运行迁移时将看到的不同.

如果很容易重新创建开发数据,只需从schema.rb重建数据库 - 然后每个人都恢复同步(但请记住,您无法从也创建表的SQL转储重新加载数据 - 这将重新创建问题.它必须是一个仅数据转储/加载).在最坏的情况下,您可以创建迁移以删除列,而另一个迁移则重新添加.