这是一个奇怪的问题,在其他一些帖子中部分涉及,但没有得到充分的直接回答。我们的schema_migrations
数据库中有一些迁移版本号,这些版本号在几年前的某个时候被一个粗心的插件转储到那里:
自从那个命中注定的那一天起,我们的架构就变成了这样:
ActiveRecord::Schema.define(:version => 20090409010513002) do
由于迁移版本号是long
s,Rails 将永远假设我们处于未来大约 6000 万年创建的模式版本。
现在,有人会认为,这是安全的,因为迁移文档说所有未在给定数据库上运行的迁移都会调用 up 方法。情况似乎是这样,因为过去 3 年我们一直在创建迁移并成功运行它们。Rails 似乎在说“您已正式迁移到版本 20090409010513002,但尚未运行迁移(2012 年发生的事情),所以我将运行它并将其添加到数据库中。
我的问题有两个:
- 现状是否存在隐患?事情似乎运作良好,但我想知道他们会继续这样做。
- 由于那些超长的迁移编号实际上并没有附加迁移文件(有一个文件是 20090409010513,但不是 001 或 002 版本),删除这些行是否有任何危害,从而让 Rails 意识到真正的最新迁移?