从中轻松删除后的schema_migration情况

时间:2012-01-10 19:12:29

标签: mysql ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.1

30分钟前,我去了MySQL和我在RoR中使用过的数据库。然后我去schema_migration然后输入

DELETE FROM schema_migration WHERE version=20120110152044;

完成这项工作后,我输入rake db:migrate,我希望我几分钟前删除的迁移会再次添加到schema_migration,但我会面对此消息:

  

“MySQL2 :: ERROR表'football_leagues'已经存在......”

有人可以告诉我这条消息的原因吗?

2 个答案:

答案 0 :(得分:1)

您的20120110152044迁移可能会创建football_leagues表,其中包含:

create_table :football_leagues do |t|
    #...

upchange方法中。从schema_migrations表中删除条目不会回滚迁移,它只会更改已完成迁移的记录。您可能需要返回MySQL并手动删除football_leagues表:

mysql> drop table football_leagues;

如果您需要保留football_leagues,则必须将迁移更改为不再尝试创建football_leagues

您可以使用rake db:rollback来回滚迁移,而不是手动编辑schema_migrations,只有在您确定自己确切知道自己的情况时才应编辑schema_migrations做的。

答案 1 :(得分:-1)

我不想听起来光​​顾,但这是因为你正在尝试创建一个名为football_leagues的表,当它已经存在时。运行rake db:drop db:migrate以删除表(以及数据库中的任何其他表)并重新运行迁移。 您将丢失该数据库中的所有数据。