【发布时间】:2010-11-23 20:35:48
【问题描述】:
是否有 rake 任务显示 Rails 应用程序中的待处理迁移?
【问题讨论】:
标签: ruby-on-rails rails-migrations
是否有 rake 任务显示 Rails 应用程序中的待处理迁移?
【问题讨论】:
标签: ruby-on-rails rails-migrations
有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.
【讨论】:
尝试 rake -h(帮助)并查看 rake -n(= rake --dry-run)。所以可能像 rake -n db:migrate 这样的东西应该能得到你想要的。
【讨论】:
rake db:migrate:status(Rails 3 到 5)或rails db:migrate:status(Rails 5)将完成此操作。见this commit。
up 表示迁移已运行。 down 表示尚未运行迁移。
【讨论】:
Don't know how to build task 'db:migrate:status'
rake -T 中,但其他的会出现吗?
up 表示迁移已运行。 down 表示尚未运行迁移。
rake db:version 将在 Rails 2 上完成此操作。
【讨论】:
此命令将列出所有迁移及其状态(UP 或 DOWN)
Rails 3 和 4
rake db:migrate:status
Rails 5
rake db:migrate:status
# Or
rails db:migrate:status
【讨论】:
以下命令检查迁移状态:
rake db:migrate:status
或
当您运行您的服务器时,它会显示一条消息以首先运行您的待定迁移。
【讨论】:
可能不是 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 中
这适用于 rails 5.2
ActiveRecord::Base.connection.migration_context.needs_migration?
【讨论】:
【讨论】:
如果您需要一个 bash 单行程序来确定是否运行迁移(例如,只有在有待处理迁移时才迁移到 Heroku release phase command),这可行:
(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
【讨论】: