将db / schema.rb放到.gitignore列表中是个好主意吗?

所以我在工作中建议的是将db / schema.rb放入.gitignore文件,因此我们没有(不时)合并问题。

有些人担心,如果发生了可怕的事情(meteor在数据库服务器上从天而降,同时所有db / migrete文件都已损坏),我们可能会松开架构,我们将不得不使用rake db:purge(重用) schema.rb)。 我同意这是可能的,这是一个很好的论点,但它不应该是问题,因为每次我们进行rake db:migrate时都会生成db / schema.rb。 因此,即使我们不在服务器上推送schema.rb,我们也在推动迁移添加运行db:migrate每次我们使用数据库更改进行部署时,db:migrate rails将在服务器端自动生成schema.rb,并且schema.rb在服务器上保持不变,直到我们执行另一个db:migrate。

那么你的意见是什么,我们是否应该将db / schema.rb放入git ignore?

谢谢

无论您需要什么来重现操作环境,都应该放入VCS。
如果,为了重建您的应用程序,您需要具有正确的schema.rb (在正确的版本),然后是,它可以是版本化的。

但是,如果您可以通过另一个进程获取它,那么通过其他参考而不是VCS可以更好地进行备份。

当您在开发不同模型属性集的function分支之间切换时,如果没有schema.rb,您有时需要:

  1. rake db:migrate:down VERSION=xxx迁移,这些迁移是前一段时间创建的,但未合并到其他分支
  2. git checkout branch
  3. rake db:migrate迁移所有新创建的分支

我在以前的项目中遇到了一些问题,其中schema.rb在.gitignore中。 每当我看到错误时,我就不得不删除数据库并从迁移中重新创建,而使用schema.rb我可以在几分之一的时间内加载模式,然后使用rake db:seed来加载数据。 但这并不重要。

我也很好奇你在使用schema.rb时遇到了什么问题? 大多数情况下,您可以使用rake db:dump覆盖此文件而不必担心更改(我假设您没有手动修改数据库结构),只需将其添加为合并解析。