1

当我新迁移并运行它时,发生错误:

$ rake db:migrate
== CreateEReadings: 迁移 ======================================= ========
-- create_table(:e_readings) rake 中止!发生错误,此迁移和所有后续迁移均已取消:

SQLite3::SQLException: 表“e_readings”已经存在

而这个 e_readings 是我使用迁移创建的最后一个表。

迁移文件名为:20120508145115_create_e_readings.rb

db/schema.rb 中的版本是:

:版本=> 20120508145115

似乎rails忘记了我已经运行了这个迁移并尝试重新播放它,所以发生了错误,但是为什么会发生这种情况,我该如何解决这个问题?

4

3 回答 3

3

似乎您之前可能已经运行过它,但由于某种原因在创建表后它失败了。如果您确定它已经运行,您可以手动将记录添加到“schema_migrations”表,版本为 20120508145115。

如果这只是一个开发环境并且您不介意将它吹走,您也可以运行rake db:reset它会删除、创建、加载模式并重新植入它。

于 2012-06-16T12:22:27.680 回答
1

我同意比灵顿和安迪的观点。如果是开发环境,请在终端中尝试以下操作:

rake db:drop
rake db:create
rake db:migrate

这将破坏您的数据库,重新创建它并运行您的所有迁移。

您可以尝试的另一件事是使用回滚,rake db:rollback直到您看到此迁移(或之前的迁移)已回滚,然后rake db:migrate从该点再次运行直到您的最新点。rake db:rollback一次回滚一个迁移文件。

不过,我会选择删除并重新创建,以确保没有任何有趣的东西存在。

希望这可以帮助。

于 2012-06-16T12:50:08.080 回答
1

我认为比灵顿是对的。您的迁移可能在您第一次运行时失败。除了他的建议之外,您还可以尝试手动从数据库中删除表并重新运行迁移,看看第一次出了什么问题

于 2012-06-16T12:35:04.040 回答