183

是否有显示 Rails 应用程序中待处理迁移的 rake 任务?

4

10 回答 10

288

rake db:migrate:status(Rails 3 到 5) 或rails db:migrate:status(Rails 5) 将完成此操作。请参阅此提交

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

于 2011-01-25T17:58:24.283 回答
43

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.
于 2009-08-28T20:04:15.750 回答
18

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

导轨 3 和 4

rake db:migrate:status

导轨 5

rake db:migrate:status

# Or

rails db:migrate:status
于 2016-09-20T13:59:23.827 回答
15

rake db:version将在 Rails 2 上完成此操作。

于 2012-02-03T16:51:58.410 回答
10

这适用于rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?
于 2018-10-15T14:45:34.010 回答
3

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

rails db:migrate:status

有关此链接的更多信息:Rails Active Record 迁移

于 2019-01-28T05:44:34.513 回答
3

如果您需要一个 bash 单行器来确定是否运行迁移(例如,只有在有待处理迁移时才在Heroku 发布阶段命令中迁移),这可行:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
于 2019-05-26T16:57:11.003 回答
2

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

于 2009-08-28T20:14:56.100 回答
2

可能不是 OP 所要求的,但如果您只需要快速检查是否有任何迁移待处理以用于 rake 任务,而无需求助于

耙分贝:迁移:状态 | grep down (如果你在 Windows 上可能不起作用)

ActiveRecord::Migration.check_pending!(引发您需要救援的 ActiveRecord::PendingMigrationError)

你可以使用需求迁移?方法: https ://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

于 2018-05-12T10:30:07.893 回答
1

以下命令检查迁移状态:

rake db:migrate:status

或者

当您运行服务器时,它会显示一条消息,首先运行您的待定迁移。

于 2017-01-11T07:01:17.890 回答