在rails中显示待定迁移

时间:2009-08-28 20:00:15

标签: ruby-on-rails rails-migrations

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

10 个答案:

答案 0 :(得分:235)

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

答案 1 :(得分: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.

答案 2 :(得分:15)

rake db:version将在Rails 2上完成此任务。

答案 3 :(得分:15)

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

Rails 3和4

rake db:migrate:status

Rails 5

rake db:migrate:status

# Or

rails db:migrate:status

答案 4 :(得分:3)

这适用于Rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

答案 5 :(得分:2)

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

答案 6 :(得分:1)

按照命令检查迁移状态:

rake db:migrate:status

OR

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

答案 7 :(得分: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

答案 8 :(得分:1)

如果您需要bash一线式来确定是否运行迁移(例如,在有待处理的迁移时仅在Heroku release phase command中进行迁移),那么可以这样做:

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

答案 9 :(得分:0)

如果要查看已完成或正在进行多少迁移,可以使用以下命令查看。

rails db:migrate:status

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