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


Ответы:


258

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

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


Я встаю 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.

Я люблю добавлять это в оркестровку зависимостей между контейнерами 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


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


2
ActiveRecord::Migrator.needs_migration?в Rails 5.1
Ниборг

1

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

rake db:migrate:status

ИЛИ

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



1

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

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.