【问题标题】:seems that rails is replay a migration似乎 Rails 正在重播迁移
【发布时间】:2012-06-19 04:36:58
【问题描述】:

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

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

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

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

迁移文件名为:20120508145115_create_e_readings.rb

db/schema.rb 中的版本是:

:版本 => 20120508145115

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

【问题讨论】:

    标签: ruby-on-rails rails-migrations


    【解决方案1】:

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

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

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 谢谢,模式中的 :version => 20120508145115 是做什么用的?似乎rails根据schema_migrations表中的记录运行迁移,所以这是:version => 20120508145115冗余?
        猜你喜欢
        • 1970-01-01
        • 2016-03-21
        • 1970-01-01
        • 2017-08-31
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2011-10-02
        • 2020-06-03
        相关资源
        最近更新 更多