1

在我的公司,我们看到字段出现/消失、出现错误表以及schema.rb文件中冲突的间歇性问题。这些问题一直在发生,浪费了我们的时间。

我很难让我的同事相信我们的迁移/schema.rb问题可以通过使用标准工作流程来解决。

首先,事实:

  • 我们schema.rb有源代码控制
  • 我们知道这schema.rb应该是我们数据库的最终事实来源
  • 我们在生产/QA 中使用 SqlServer,在开发/测试中使用 Postgresql
  • 这意味着我们实际上有两个schema.rb文件:一个用于 SqlServer,一个用于 Postgresql。
  • 我们当前的schema.rb文件与我们的生产数据库不同步,因为我们允许开发人员通过本地更改来污染它。

我相信(大部分)我们的迁移/schema.rb问题将通过遵循这个简单的规则来解决:

在运行迁移之前,请始终将架构加载到新创建的数据库中:

rake db:drop db:create db:schema:load db:migrate

然后,仔细检查您的更改,以确保只有迁移中的更改被提交到 schema.rb

我的同事认为最好不要让开发人员更改schema.rb,而是在我们的 Jenkins 服务器上设置一个任务,该任务将运行迁移并自动提交更改到schema.rb. 他说我们应该从我们的流程中去除人为因素,并使工作自动化,这不会让未来发生问题。

虽然我相信自动化工作,但我不认为这是最好的解决方案,因为它只是针对症状而不是原因。自动化 git 提交让我很紧张,因为很多事情都可能出错。更重要的是,分离迁移及其相应的schema.rb变化对我来说似乎是一个非常糟糕的主意。我们不应该继续让我们的开发人员忽视污染的负面影响schema.rb。相反,我们应该教他们一个更好的工作流程,避免污染schema.rb,并让他们知道在将来发生问题时调试问题。

人们可以权衡并推荐我们的哪种解决方案更好吗?还是我们还没有想到的更好的解决方案?

4

0 回答 0