在Rails中显示挂起的迁移


Answers:


258

rake db:migrate:status(第3到5条)或rails db:migrate:status(第5条)将完成此操作。看到这个提交

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


Don't know how to build task 'db:migrate:status'上了3.2.8
Peter Ehrlich

1
@PeterEhrlich:它不会出现在rake -T其他人身上吗?
jrdioko 2012年

2
捆绑执行rake db:migrate:status
Nadeem Yasin

2
您如何读取此命令的输出?如果某行的状态为“关闭”,是否表示这是一个挂起的迁移?
丹尼斯

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

37

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 4.1.16中
Magne

以及在铁轨5.1.3中工作
Wilson Silva



6

这适用于rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2

尝试使用rake -h(帮助)并查看rake -n(= rake --dry-run)。因此,类似rake -n db:migrate之类的东西应该可以为您提供所需的东西。


2
那行不通。它只是打印:**调用db:migrate(first_time)**调用环境(first_time)**执行(

2

可能不完全是OP的要求,但是如果您只是需要快速检查是否有任何待处理的迁移待用于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


2
ActiveRecord::Migrator.needs_migration?在Rails 5.1中
niborg '19

1

以下命令检查迁移状态:

rake db:migrate:status

要么

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



1

如果您需要bash一线式来确定是否运行迁移(例如,仅在存在挂起的迁移时才在Heroku发布阶段命令中进行迁移),则可以这样做:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.