Ale*_*tko 6 migration ruby-on-rails rails-migrations ruby-on-rails-3 ruby-on-rails-4
我碰巧删除了迁移,我不想还原这些已删除的迁移.
这是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 **********
Run Code Online (Sandbox Code Playgroud)
rake db:migraterake db:rollback由于缺少文件,命令将无法工作.
我没有意图丢失我的数据,所以我不想使用rake db:drop或rake db:reset.
我能做些什么来执行迁移和回滚以及如何摆脱丢失的文件?
小智 7
亚历山大,你可以摆脱那些不存在的迁移.当你这样做时rake db:migrate:status,它将显示在问题中.
所以你可以schema_migrations使用纯SQL查询从表中手动删除这些版本.
delete from schema_migrations where version = <version_number>
通过执行上面的查询,它将被解决.
如果您可以找到迁移的时间戳 - 文件名的数字部分,那么您可以执行以下操作:
rake db:migrate:down VERSION=20100905201547
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法找到时间戳 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
Run Code Online (Sandbox Code Playgroud)