【问题标题】:Show pending migrations in rails在 Rails 中显示挂起的迁移
【发布时间】:2010-11-23 20:35:48
【问题描述】:

是否有 rake 任务显示 Rails 应用程序中的待处理迁移?

【问题讨论】:

    标签: ruby-on-rails rails-migrations


    【解决方案1】:

    rake db:abort_if_pending_migrations(至少在 Rails 2.3.3 中,不确定何时引入)。描述说“如果有待处理的迁移,则会引发错误”。这似乎更多地用作其他任务的先决条件,但我猜您可以将其用于您的目的。

    编辑:这是刚刚生成且未运行“测试”迁移后的输出示例

    rails_project theIV$ rake db:abort_if_pending_migrations
    (in /Users/theIV/Sites/rails_project/)
    You have 1 pending migrations:
      20090828200602 Test
    Run "rake db:migrate" to update your database then try again.
    

    【讨论】:

    • 我喜欢添加这个来协调 Rails 容器之间的依赖关系
    • 在 Rails 4.1.16 中仍然存在
    • 也适用于 rails 5.1.3
    【解决方案2】:

    尝试 rake -h(帮助)并查看 rake -n(= rake --dry-run)。所以可能像 rake -n db:migrate 这样的东西应该能得到你想要的。

    【讨论】:

    • 那行不通。它只打印: ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute (dry run) environment ** Execute (dry run) db:migrate
    【解决方案3】:

    rake db:migrate:status(Rails 3 到 5)或rails db:migrate:status(Rails 5)将完成此操作。见this commit

    up 表示迁移已运行。 down 表示尚未运行迁移。

    【讨论】:

    • 我在 rails 3.2.8 上收到 Don't know how to build task 'db:migrate:status'
    • @PeterEhrlich:它不会出现在rake -T 中,但其他的会出现吗?
    • bundle exec rake db:migrate:status
    • 你如何读取这个命令的输出?如果一行的状态为“down”,是否意味着它正在等待迁移?
    • up 表示迁移已运行。 down 表示尚未运行迁移。
    【解决方案4】:

    rake db:version 将在 Rails 2 上完成此操作。

    【讨论】:

    • 在 rails 3.2.18 中也有效
    【解决方案5】:

    此命令将列出所有迁移及其状态(UPDOWN

    Rails 3 和 4

    rake db:migrate:status
    

    Rails 5

    rake db:migrate:status
    
    # Or
    
    rails db:migrate:status
    

    【讨论】:

      【解决方案6】:

      以下命令检查迁移状态:

      rake db:migrate:status
      

      当您运行您的服务器时,它会显示一条消息以首先运行您的待定迁移。

      【讨论】:

        【解决方案7】:

        可能不是 OP 所要求的,但如果您只需要快速检查是否有任何迁移待处理以用于 rake 任务,而无需诉诸

        rake db:migrate:status | grep down(如果您在 Windows 上可能无法使用)

        ActiveRecord::Migration.check_pending! (引发您需要救援的 ActiveRecord::PendingMigrationError)

        你可以使用 needs_migration 吗?方法: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

        【讨论】:

        • ActiveRecord::Migrator.needs_migration? 在 Rails 5.1 中
        【解决方案8】:

        这适用于 rails 5.2

        ActiveRecord::Base.connection.migration_context.needs_migration?
        

        【讨论】:

          【解决方案9】:

          如果您想查看已完成或待处理的迁移量,可以使用以下命令查看。

          rails db:migrate:status
          

          有关此链接的更多信息:Rails Active Record Migration

          【讨论】:

            【解决方案10】:

            如果您需要一个 bash 单行程序来确定是否运行迁移(例如,只有在有待处理迁移时才迁移到 Heroku release phase command),这可行:

            (rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-05-02
              • 2015-06-10
              • 2013-12-13
              • 1970-01-01
              • 2016-03-17
              • 1970-01-01
              • 2015-10-31
              • 2016-08-07
              相关资源
              最近更新 更多