是否有显示 Rails 应用程序中待处理迁移的 rake 任务?
rake db:migrate:status
(Rails 3 到 5)或 rails db:migrate:status
(Rails 5)将完成此操作。请参阅this commit。
up
表示迁移已运行。 down
表示尚未运行迁移。
有 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.
此命令将列出所有迁移及其状态(UP
或 DOWN
)
导轨 3 和 4
rake db:migrate:status
导轨 5
rake db:migrate:status
# Or
rails db:migrate:status
rake db:version
将在 Rails 2 上完成此操作。
这适用于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."
尝试 rake -h(帮助)并查看 rake -n(= rake --dry-run)。所以可能像 rake -n db:migrate 这样的东西应该能得到你想要的。
可能不是 OP 所要求的,但如果您只需要快速检查是否有任何迁移待处理以用于 rake 任务,而无需求助于
耙分贝:迁移:状态 | grep down (如果你在 Windows 上可能不起作用)
ActiveRecord::Migration.check_pending! (引发您需要救援的 ActiveRecord::PendingMigrationError)
你可以使用需求迁移?方法:https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class
ActiveRecord::Migrator.needs_migration?
在 Rails 5.1 中
以下命令检查迁移状态:
rake db:migrate:status
或者
当您运行服务器时,它会显示一条消息,首先运行您的待定迁移。
Don't know how to build task 'db:migrate:status'
rake -T
中,但其他的出现了吗?up
表示迁移已运行。down
表示尚未运行迁移。