销毁对已删除迁移的引用

Posted

技术标签:

【中文标题】销毁对已删除迁移的引用【英文标题】:Destroying a reference to a deleted migration 【发布时间】:2013-09-15 20:51:40 【问题描述】:

好吧,我犯了一个巨大的错误,并在本地删除了几个迁移(现在我知道得更清楚了)。这已成为一个问题,因为现在当我尝试部署到 heroku 时,我收到以下错误:

Running `rake db:migrate` attached to terminal... up, run.3430
rake aborted!
Multiple migrations have the name CreateScores
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/migration.rb:978:in `validate'

起初这让我感到惊讶,因为我只有一个名为“创建分数”的迁移 - 但后来我注意到了这一点:

Drews-MacBook-Pro:quiz drewwyatt$ rake db:migrate:status

database: /Users/drewwyatt/Sites/Ruby/Rails/quiz/db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20130828212225  Create answers
   up     20130828212306  Create questions
   up     20130829210727  Create quizzes
   up     20130829211302  Remove quiz id from question
   up     20130829212349  Create assignments
   up     20130829234338  Create employees
   up     20130829234541  Add role and active to employee
   up     20130830032801  ********** NO FILE **********
   up     20130902183412  ********** NO FILE **********
   up     20130902183530  Create scores
   up     20130902230036  Add indexes to score
   up     20130904210011  Create positions
   up     20130904212007  Add position to employee
   up     20130905161805  Create quiz assignments

我的假设是已删除的迁移之一也被命名为“创建分数”。所以我的问题是,我怎样才能摆脱 2 个已删除的迁移?

【问题讨论】:

请参考***.com/questions/3647685/… 【参考方案1】:

回滚到您遇到错误的迁移版本之上。您可以按照下面给出的方式进行操作。

rake db:migrate:down VERSION=20130829234541

如果您的 root/db/migrate 文件夹中存在与该错误相关的任何引用,则删除该引用。

然后再次运行迁移。会好的。

【讨论】:

【参考方案2】:

为了一个快速的解决方案,您可以一个一个地迁移每个版本的迁移文件,而不是像一次迁移所有的迁移

rake db:migrate:up VERSION=version_of_the file

请查看此链接:Run a single migration file

【讨论】:

以上是关于销毁对已删除迁移的引用的主要内容,如果未能解决你的问题,请参考以下文章

C ++未定义对已继承的受保护类成员的引用[重复]

Android活动生命周期 - 重新启动(销毁)应用程序不会删除对(自定义)监听器的引用?

销毁 Jframe 对象

如何销毁.Net中的对象

遍历删除

如何使用 jQuery 销毁 DOM 元素?