在 Rails 应用程序中是否有一个 rake 任务来显示挂起的迁移?
有 rake db:abort_if_pending_migrations(至少在 Rails2.3.3中,不确定它是什么时候引入的)。描述说“如果有挂起的迁移,则引发错误”。这似乎更多地被用作其他任务的先决条件,但我猜想您可以将其用于您的目的。
rake db:abort_if_pending_migrations
编辑: 下面是刚刚生成并且没有运行“测试”迁移之后的输出示例
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 (help)并查看 rake-n (= rake ——演练)。因此,可能像 rake-n db: shift 这样的东西应该可以得到您想要的结果。
rake db:migrate:status(Rails 3 to 5)或 rails db:migrate:status(Rails 5)将实现这一点。参见 这个承诺。
rake db:migrate:status
rails db:migrate:status
up表示迁移已经运行。 down表示迁移尚未运行。
up
down
rake db:version将在 Rails 2上实现这一点。
rake db:version
此命令将列出所有迁移及其状态(UP或 DOWN)
UP
DOWN
3号和4号铁轨
铁路5
rake db:migrate:status # Or rails db:migrate:status
下面是检查迁移状态的命令:
或者
当您运行服务器时,它将显示一条消息,以便首先运行挂起的迁移。
可能不完全符合 OP 的要求,但是如果您只是需要快速检查是否有任何迁移挂起,以便在 rake 任务中使用,而不需要求助于
Rake db: shift: status | grep down (在 Windows 上可能无法工作)
(引发需要拯救的 ActiveRecord: : PendingMigationError)
你可以使用 need _ mobile? 方法: Https://apidock.com/rails/v4.0.2/activerecord/migrator/needs_migration%3f/class
这个适用于5.2轨道
ActiveRecord::Base.connection.migration_context.needs_migration?
如果你想看看有多少迁移完成或暂停,你可以看到使用下面的命令。
更多关于此连结的资料: Rails 活动记录迁移
如果您需要一个 bash 一行程序来决定是否运行迁移(例如,只有在有一个挂起的迁移时才在 Heroku 释放阶段命令中进行迁移) ,这样可以:
(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."