7

我遇到了一个问题,我在一个 rails 项目的两个分支上工作,每个项目都有一个迁移来添加一个列。当时,rake db:migrate:reset导致一个问题,我完全依靠我schema.rb来正确表示我的数据库的状态。有一次,我遇到了一个问题,分支 A 添加的列进入了分支 B 的架构。由于migrate:reset不是一个选项,我求助于手动编辑架构文件。我提交了这个更改,基本上从分支 A 中删除了我在分支 B 的 schema.rb 中不需要的列。

在我将分支 A 合并到 master 之后出现问题。当我尝试将分支 B 重新设置为 master 时,我仍然在 B 中提交以删除模式文件中的列(现在已变得相关,因为它在 master 中)。Git 没有发现冲突并自动合并它。在我的 rebase 结束时,我发现我的架构与我在 master 中的架构不一致。

我的解决方法是再次编辑架构文件并将先前删除的列手动添加回架构文件。我的问题是:这被认为是非常规的吗?危险的?哈基?

现在它涉及一列,但如果这涉及多列删除/添加(危险?)解决方案可能会导致更多问题和 db/schema.rb 不一致。

4

1 回答 1

10

通常认为编辑schema.rb文件是一种不好的做法。

根据Rails 迁移指南

迁移虽然可能很强大,但并不是您的数据库模式的权威来源。该角色属于 db/schema.rb 或 Active Record 通过检查数据库生成的 SQL 文件。它们不是为编辑而设计的,它们只是代表数据库的当前状态。

schema.rb每次运行新迁移时都会更新:

请注意,运行 db:migrate 还会调用 db:schema:dump 任务,该任务将更新您的 db/schema.rb 文件以匹配您的数据库结构。

我建议只花一些时间整理一下,让schema.rb文件回到正轨,并纠正到最新的迁移集。

于 2012-07-03T02:49:06.837 回答