【问题标题】:What is the right approach to deal with Rails db/schema.rb file in GIT?在 GIT 中处理 Rails db/schema.rb 文件的正确方法是什么?
【发布时间】:2011-06-23 06:43:45
【问题描述】:

我们应该在提交 GIT 时包含schema.rb 吗?还是我们应该忽略它?什么是正确的方法?

【问题讨论】:

标签: ruby-on-rails git


【解决方案1】:

Rails 2 的标准 schema.rb 文件在文件顶部的注释块末尾有这个:

# It's strongly recommended to check this file into your version control system.

我玩过的 Rails 3 schema.rb 也说了同样的话。我认为评论说明了一切。


响应 cmets 的更新: 是的,可能会犯错误,并且您可能会遇到冲突的更改和错误,从而破坏您的schema.rb,但这就是您希望它处于修订控制之下的原因,修订控制允许您跟踪所有内容并在需要时进行备份。整个源代码树中只有一件事指定了您的数据库模式,那就是schema.rb。您的数据库架构绝对是一个关键工件,任何重要的东西都需要在修订控制中进行跟踪。

schema.rb 的任何更新/合并问题都应该通过整理您的冲突迁移来解决,这样schema.rb 将作为解决实际问题的副作用得到解决。

是的,schema.rb 是一个生成的文件,但它仅在您的文本编辑器生成您的 pancake.rb 模型文件或生成未编辑的脚手架文件的意义上生成。

是的,您可以通过构建一个新数据库然后运行所有迁移来重建您的 schema.rb 文件。但是,您应该不时清除旧的迁移,以避免每次rake db:migrate 时都必须检查数百个迁移文件,因此“重建并运行所有迁移”通常不是一个高度活跃的项目的选项。

【讨论】:

  • 您是否将此文件中的更改提交到 git,例如,在运行新迁移之后?
  • @mu..@pcg79...我曾经将schema.rb最初提交到GIT,然后不提交到GIT,之后所做的更改。如果有人错误提交,将导致拉动时出错。然后必须签出文件并拉动。恐怕当我将更改提交到GIT时会出现此错误。问题是每次执行迁移时都会覆盖schema.rb。例如来自 git 的 schema.rb 更新了模式,但是当我们拉取它时,我们将不得不运行 rake db:migrate 以使本地 db 更新。这将更新 schema.rb 文件,并且在从 git 拉取时可能会导致错误
  • 这似乎适合检查版本控制,但不一定会推送给您的团队成员。 “如何?”你可能会问。分支我亲爱的华生,分支。
  • 好吧,在开始为多个项目将模式文件提交到 GIT 之后,从项目开始,我想说我们只有很小的小冲突,通常在最后一个迁移编号附近,这可以很容易解决。因此,总体而言,这是一个平稳的旅程。
  • @rubyprince:这也是我的经验,我从来没有遇到过与schema.rbstructure.sql 的冲突问题,这不是通过整理迁移来解决的。
【解决方案2】:

是的。架构文件用于在使用 rake db:reset 和其他命令时配置数据库。迁移仅应在更改数据库架构时使用,并且始终会生成新的架构文件。

【讨论】:

    【解决方案3】:

    嗯,默认情况下它不包含在 .gitignore 中。所以,我认为你包括它不会有问题(我在我的项目中这样做,没有任何问题)。

    【讨论】:

    • 我将它包含在初始提交中,但是,您是否会将对架构文件的更改提交到 git,例如,在运行新迁移之后?
    • 只是作为提交我的其他更改的一部分。我不会再关注更频繁地提交迁移。
    【解决方案4】:

    我没有将此文件提交给 Git,因为它是在我启动 rake db:migrate 时创建的。

    如果我将此文件提交到 Git,我将无法在每个 db:migrate 之后从服务器中提取新的更改。

    【讨论】:

    • 我认为,如果您的 schema.rb 与迁移生成的内容不匹配,那么您还有另一个问题,您通过不提交 schema.rb 来忽略该问题
    • 我同意将 schema.r 包含到 git 但在 development 环境 rake db:migrate 以及 production 环境中运行时我必须做什么???
    • @inye:您 rake db:migrate 在生产中,这会将 schema_migrations 表与您的 db/migrate 目录进行比较,以查看需要运行什么才能使您的生产数据库保持最新状态。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多