ChatGPT解决这个技术问题 Extra ChatGPT

在 Rails 中显示挂起的迁移

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


M
Malik Shahzad

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

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


我在 Rails 3.2.8 上获得 Don't know how to build task 'db:migrate:status'
@PeterEhrlich:它没有出现在 rake -T 中,但其他的出现了吗?
bundle exec rake db:migrate:status
您如何阅读此命令的输出?如果一行的状态为“down”,这是否意味着它正在等待迁移?
up 表示迁移已运行。 down 表示尚未运行迁移。
t
theIV

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 容器之间的依赖关系
在 Rails 4.1.16 中仍然存在
也适用于 rails 5.1.3
D
Deepak Mahakale

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

导轨 3 和 4

rake db:migrate:status

导轨 5

rake db:migrate:status

# Or

rails db:migrate:status

g
gerryster

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


在 rails 3.2.18 中也有效
S
Sairam

这适用于rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

F
Foram

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

rails db:migrate:status

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


n
niborg

如果您需要一个 bash 单行程序来确定是否运行迁移(例如,只有在存在待处理迁移时才在 Heroku release phase command 中迁移),这可行:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."

J
John Lockwood

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


那是行不通的。它只打印: ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute (dry run) environment ** Execute (dry run) db:migrate
w
wondersz1

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

以下命令检查迁移状态:

rake db:migrate:status

或者

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