ruby-on-rails 有没有解决Rails删除迁移的方法?

kt06eoxx  于 2023-02-26  发布在  Ruby
关注(0)|答案(3)|浏览(133)

我碰巧删除了迁移,我不想还原这些已删除的迁移。
这是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:migraterake db:rollback命令将不起作用。
我无意丢失数据,因此不想使用rake db:droprake db:reset
我可以做些什么来执行迁移回滚,以及如何删除丢失的文件?

sycxhyv7

sycxhyv71#

Alexandria ,你可以摆脱那些不存在的迁移。当你做rake db:migrate:status它会显示在问题。
因此您可以使用纯SQL查询从schema_migrations表中手动删除这些版本。
delete from schema_migrations where version = <version_number>通过执行上面的查询,它将被解析。

9udxz4iz

9udxz4iz2#

如果您可以找到迁移的时间戳(文件名的数字部分),则可以执行以下操作:

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
jjjwad0x

jjjwad0x3#

我已经删除了要回滚的迁移。
所以我:
1.重新创建了相同的迁移,
1.以Rails想要的时间戳命名迁移文件,
1.运行rake db:rollback STEP=1
而且奏效了。

相关问题