简体   繁体   中英

Show pending migrations in rails

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

rake db:migrate:status (Rails 3 to 5) or rails db:migrate:status (Rails 5) will accomplish this. See this commit .

There is rake db:abort_if_pending_migrations (at least in Rails 2.3.3, not sure when it was introduced). The description says 'Raises an error if there are pending migrations'. This seems to be used more as a prerequisite for other tasks, but I'm guessing you could use it for your purposes.

EDIT: Here is an example of the output after having just generated and not run a 'test' migration

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.

This command will list all migrations with their status ( UP or DOWN )

Rails 3 and 4

rake db:migrate:status

Rails 5

rake db:migrate:status

# Or

rails db:migrate:status

rake db:version将在Rails 2上实现这一点。

这适用于rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

Try rake -h (help) and have a look at rake -n (= rake --dry-run). So probably something like rake -n db:migrate should get you what you want.

Following command to check migration status:

rake db:migrate:status

OR

when you run your server, it will display a message to run your pending migration first.

Might not quite be what OP is asking for, but if you just need to quickly check if any migrations are pending for use in a rake task, without resorting to

rake db:migrate:status | grep down (might not work if you're on Windows)

ActiveRecord::Migration.check_pending! (raises ActiveRecord::PendingMigrationError that you need to rescue)

you can use needs_migration? method: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

如果您需要bash one-liner来确定是否运行迁移(例如,只有在有挂起的迁移时在Heroku发布阶段命令中迁移),这可以:

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

If you want to see how much migration is done or pending you can see using below command.

rails db:migrate:status

More on this link: Rails Active Record Migration

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM