【问题标题】:How do you see what rails3 migrations have been run against a database您如何查看针对数据库运行了哪些 rails3 迁移
【发布时间】:2014-01-20 14:46:11
【问题描述】:

我正在将一个分支合并到 master 并且每个分支都有迁移。

我正在尝试通过将合并迁移应用到生产备份 (PostgreSQL) 来了解合并迁移的工作原理。

我的两个分支迁移创建了一个表,第一个失败,因为该表已经存在。

这很奇怪,因为主存储库没有该迁移。

文件 db/schema.rb 被忽略,因此它表明该表存在于开发数据库上的早期迁移中。我将其删除,再次看到该表存在,因此看来我在本地针对错误的数据库运行了它。

那么如何找到已运行的迁移列表。 rake:db:version 只显示最新的。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 migration


    【解决方案1】:
    rake db:migrate:status
    
    # up      20131010170722  Devise create users
    # up      20131015094519  Create customers
    # down    20131121061642  Remove fileds from quantitative parameter
    

    【讨论】:

      【解决方案2】:

      git 分支用于代码。但是无论你在哪个分支,db都是一样的。

      如果您在分支中运行了迁移,您将在 master 中看到 db 更改。这是正常行为。

      对于开发数据库,​​这很简单,只需运行 rake db:reset 就可以了。

      【讨论】:

        【解决方案3】:

        rake db:version 确实会向您显示正在运行的最新迁移。您可以或多或少假设所有早期迁移都已运行,但如果您想确定您正在查看的迁移已执行,您可以评估 schema_migrations 表的内容,该表将列出所有的时间戳成功执行了迁移。

        我强调成功,因为这可能是你的问题。如果在执行迁移过程中(例如创建表后)迁移失败,则迁移不会在schema_migrations 中列出,但无法回滚。我之前已经解释过(here),所以我现在无耻地引用自己:

        rake db:migrate 将通过打印错误跟踪并说“后来的迁移已取消”来告诉您错误。撤消更改并恢复到之前的状态似乎是合乎逻辑的,但这会很棘手,因为它并不总是知道之前的状态是什么。考虑一个您还处理数据的迁移。或者删除多个列的迁移。它必须做出假设(如果可以的话),这可能会给您带来更糟糕的结果。

        查看您的数据库,我怀疑该表确实已经存在,但是如果您查看创建它的迁移,您可能会找到迁移本身失败的原因(之后 em> 创建表)。如果不能,请分享给我们看看。

        【讨论】:

        • 我非常想知道为什么这个答案值得我对 SO 投反对票。如果我错了,我想吸取教训。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2017-10-15
        • 2021-09-11
        • 2012-08-16
        • 2021-07-03
        • 2014-10-25
        • 2016-09-17
        相关资源
        最近更新 更多