有没有办法解决 Rails 删除的迁移?

问题描述 投票:0回答:3

我碰巧删除了迁移,我不想恢复这些删除的迁移。

这就是

rake db:migrate:status
产生的:

 Status   Migration ID    Migration Name
------------------------------------------------------

   up     0               ********** NO FILE *********
   up     20150209023430  Create users 
   up     20150320184628  ********** NO FILE **********
   up     20150322004817  Add roles to users
   up     20150403190042  ********** NO FILE **********

rake db:migrate
rake db:rollback
命令由于缺少文件而无法运行。

我无意丢失我的数据,所以我不想使用

rake db:drop
rake db:reset

我该怎么做才能执行 migraterollback 以及如何删除丢失的文件?

ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 migration rails-migrations
3个回答
15
投票

Alexander,你可以摆脱那些不存在的迁移。 当你做

rake db:migrate:status
它会显示在问题中。

因此您可以使用纯 sql 查询从

schema_migrations
表中手动删除这些版本。

delete from schema_migrations where version = <version_number>
通过执行上面的查询,它将得到解决。


6
投票

如果你能找到迁移的时间戳 - 文件名的数字部分,那么你可以这样做:

rake db:migrate:down VERSION=20100905201547

您可以使用

rake db:migrate:status

找到时间戳

编辑 - 当迁移文件被不可恢复地删除

你可以通过创建一个空的迁移文件,迁移,然后回滚两次来解决这个问题。然后,确保在再次迁移之前删除空的迁移文件。

$ bundle exec rails g migration fix_rollback_error
$ bundle exec rails db:migrate
$ bundle exec rails db:rollback STEP=2
$ rm db/migrate/20200217040302_fix_rollback_error.rb
$ bundle exec rails db:migrate

0
投票

我已经删除了一个我想回滚的迁移。

所以我:

  1. 重新创建了一个相同的迁移,
  2. 在 rails 想要的时间戳后命名迁移文件,
  3. rake db:rollback STEP=1

成功了。

© www.soinside.com 2019 - 2024. All rights reserved.