在rails中手动编辑schema.rb是否安全?

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

在将分支A合并到主服务器之后出现了问题。 当我尝试将分支B重新命名为master时,我仍然在B中进行了提交,以删除模式文件中的列(现在已经变得相关,因为它在master中)。 Git没有看到这方面的冲突并自动合并它。 在我的rebase结束时,我发现我的模式与master中的模式不一致。

我的修复是再次编辑模式文件并手动将以前删除的列添加回模式文件。 我的问题是:这被认为是非传统的吗? 危险吗? 哈克?

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

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

根据Rails迁移指南 :

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

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

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

我建议只花一些时间来解决问题并将schema.rb文件恢复正常并更正最新的迁移集。