1

这是一个奇怪的问题,在其他一些帖子中部分涉及,但没有得到充分的直接回答。我们的schema_migrations数据库中有一些迁移版本号,这些版本号在几年前的某个时候被一个粗心的插件转储到那里:

在此处输入图像描述

自从那个命中注定的那一天起,我们的架构就变成了这样:

ActiveRecord::Schema.define(:version => 20090409010513002) do

由于迁移版本号是longs,Rails 将永远假设我们处于未来大约 6000 万年创建的模式版本。

现在,有人会认为,这是安全的,因为迁移文档说所有未在给定数据库上运行的迁移都会调用 up 方法。情况似乎是这样,因为过去 3 年我们一直在创建迁移并成功运行它们。Rails 似乎在说“您已正式迁移到版本 20090409010513002,但尚未运行迁移(2012 年发生的事情),所以我将运行它并将其添加到数据库中。

我的问题有两个:

  1. 现状是否存在隐患?事情似乎运作良好,但我想知道他们会继续这样做。
  2. 由于那些超长的迁移编号实际上并没有附加迁移文件(有一个文件是 20090409010513,但不是 001 或 002 版本),删除这些行是否有任何危害,从而让 Rails 意识到真正的最新迁移?
4

1 回答 1

0

对于第一个问题,我能想到的一个危险是,您的db/schema.rb文件对于确定它是否与数据库中的内容相对应没有那么有用。

对于第二个问题 - 我假设屏幕截图来自您的生产数据库。schema_migrations如果您rake db:setup在开发环境中进行操作,您会在表格中看到什么?如果schema_migrations开发中的表没有这两个虚假条目,我认为从生产数据库中删除它们可能是安全的。

于 2012-10-18T21:47:43.673 回答