30分钟前,我去了MySQL和我在RoR中使用过的数据库。然后我去schema_migration
然后输入
DELETE FROM schema_migration WHERE version=20120110152044;
完成这项工作后,我输入rake db:migrate
,我希望我几分钟前删除的迁移会再次添加到schema_migration
,但我会面对此消息:
“MySQL2 :: ERROR表'football_leagues'已经存在......”
有人可以告诉我这条消息的原因吗?
答案 0 :(得分:1)
您的20120110152044迁移可能会创建football_leagues
表,其中包含:
create_table :football_leagues do |t|
#...
在up
或change
方法中。从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
以删除表(以及数据库中的任何其他表)并重新运行迁移。 您将丢失该数据库中的所有数据。