似乎rails重播了一次迁移

时间:2012-06-16 08:44:11

标签: ruby-on-rails rails-migrations

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

  

$ rake db:migrate
  == CreateEReadings:迁移============================================= ===
   - create_table(:e_readings)rake aborted!发生错误,此操作和所有后​​续迁移都已取消:

     

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

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

迁移文件名是:20120508145115_create_e_readings.rb

并且db / schema.rb中的版本是:

  

:version => 20120508145115

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

3 个答案:

答案 0 :(得分:3)

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

如果这只是一个开发环境并且您不介意将其删除,您也可以运行rake db:reset,这会丢弃,创建,加载架构并重新设置它。

答案 1 :(得分:1)

我认为啤酒厂是对的。您的迁移可能在第​​一次运行时失败。除了他的建议,您还可以尝试从数据库中手动删除表并重新运行迁移以查看第一次出现的问题

答案 2 :(得分:1)

我同意Beerlington和Andy。如果是开发环境,请在终端中尝试以下操作:

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

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

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

我会继续下去并重新创造,但只是为了确保没有任何有趣的东西。

希望这有帮助。