在rails中显示待定迁移

问题描述 投票:147回答:9

是否有rake任务显示rails应用程序中的挂起迁移?

ruby-on-rails rails-migrations
9个回答
236
投票

rake db:migrate:status(Rails 3到5)或rails db:migrate:status(Rails 5)将实现这一目标。见this commit


0
投票

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

rails db:migrate:status

更多相关链接:Rails Active Record Migration


35
投票

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.

15
投票

rake db:version将在Rails 2上实现这一目标。


15
投票

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

Rails 3和4

rake db:migrate:status

Rails 5

rake db:migrate:status

# Or

rails db:migrate:status

3
投票

这适用于rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2
投票

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


1
投票

按照命令检查迁移状态:

rake db:migrate:status

要么

当您运行服务器时,它将显示一条消息,以便首先运行挂起的迁移。


1
投票

可能不是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


1
投票

如果您需要bash one-liner来确定是否运行迁移(例如,只有在有挂起的迁移时才在Heroku release phase command中迁移),这可以:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
© www.soinside.com 2019 - 2024. All rights reserved.