是否有rake任务显示rails应用程序中的挂起迁移?
答案 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)
此命令将列出所有迁移及其状态(UP
或DOWN
)
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)