Rails迁移中不正确的版本号有多安全?

时间:2012-10-18 21:41:25

标签: ruby-on-rails version rails-migrations

这是一个奇怪的问题,在其他一些帖子中部分涵盖,但没有直接回答。我们在schema_migrations数据库中有一些迁移版本号,这些版本号在几年前被一个火腿插件插入了那里:

enter image description here

自那个命运的日子以来,我们的架构看起来像这样:

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

由于迁移版本号为long,因此Rails将假设我们处于未来大约6千万年创建的架构版本。

现在,人们会认为,这是安全的,因为migration documentation表示将在未在给定数据库上运行的所有迁移上调用up方法。这似乎是这种情况,因为我们在过去3年中一直在创建迁移并成功运行它们。似乎Rails说“你正式迁移到版本20090409010513002,但还没有运行迁移(2012年的某些东西),所以我将运行它并将其添加到数据库。

我的问题是双重的:

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

1 个答案:

答案 0 :(得分:0)

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

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