Показать ожидающие миграции в рельсах

Ответы:

258

rake db:migrate:status(Rails 3 до 5) или rails db:migrate:status(Rails 5) выполнят это. Смотрите этот коммит .

upозначает, что миграция была выполнена. downозначает, что миграция не была выполнена.

jrdioko
источник
Я встаю Don't know how to build task 'db:migrate:status'на рельсы 3.2.8
Питер Эрлих
1
@PeterEhrlich: это не появляется, rake -Tно другие появляются ?
Jrdioko
2
bundle exec rake db: migrate: статус
Надим Ясин
2
Как вы читаете вывод этой команды? Если статус строки «выключен», означает ли это, что выполняется миграция в ожидании?
Деннис
12
upозначает, что миграция была выполнена. downозначает, что миграция не была выполнена.
Джош
37

Есть 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.
theIV
источник
Я люблю добавлять это в оркестровку зависимостей между контейнерами rails
Винсент Де Смет
Все еще там в Rails 4.1.16
Магне
Работает и в рельсах 5.1.3
Уилсон Сильва
16

Эта команда выведет список всех миграций с их статусом ( UPили DOWN)

Рельсы 3 и 4

rake db:migrate:status

Рельсы 5

rake db:migrate:status

# Or

rails db:migrate:status
Дипак Махакале
источник
15

rake db:version выполнит это на Rails 2.

gerryster
источник
Также действует в рельсах 3.2.18
Ian Vaughan
6

Это работает для рельсов 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?
Сайрам
источник
2

Попробуйте rake -h (помощь) и посмотрите на rake -n (= rake --dry-run). Поэтому, вероятно, что-то вроде rake -n db: migrate должно дать вам то, что вы хотите.

Джон Локвуд
источник
2
Это не сработает. Он просто печатает: ** Invoke db: migrate (first_time) ** Invoke environment (first_time) ** Execute (тестовый прогон) Environment ** Execute (
тестовый
2

Возможно, это не совсем то, о чем просит OP, но если вам просто нужно быстро проверить, ожидают ли какие-либо миграции для использования в граблях, не прибегая к

грабли дБ: мигрировать: статус | grep down (может не работать, если вы работаете в Windows)

ActiveRecord :: Migration.check_pending! (поднимает ActiveRecord :: PendingMigrationError, которую нужно спасти)

вы можете использовать needs_migration? Метод: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

wondersz1
источник
2
ActiveRecord::Migrator.needs_migration?в Rails 5.1
Ниборг
1

Следующая команда для проверки статуса миграции:

rake db:migrate:status

ИЛИ

Когда вы запустите свой сервер, он покажет сообщение, чтобы сначала запустить отложенную миграцию.

puneet18
источник
1

Если вы хотите узнать, сколько выполнено или ожидает перенос, вы можете увидеть, используя команду ниже.

rails db:migrate:status

Подробнее по этой ссылке: Rails Active Record Migration

Форам Такрал
источник
1

Если вам нужна команда bash one-liner, чтобы определить, следует ли выполнять миграцию или нет (например, мигрировать только в команде фазы выпуска Heroku, когда есть ожидающая миграция), это работает:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
niborg
источник