Показати очікувані міграції в рейках


Відповіді:


258

rake db:migrate:status(Рейки 3 - 5) або rails db:migrate:status(Рейки 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: status
Nadeem Yasin

2
Як ви читаєте вихід цієї команди? Якщо статус рядка "знижений", це означає, що це міграція, що очікує на розгляд?
Денніс

12
upозначає, що міграція виконана. downозначає, що міграція не виконується.
Джош

37

Є rake db:abort_if_pending_migrations(принаймні, в Rails 2.3.3, не впевнений, коли він був введений). В описі написано: "Піднімає помилку, якщо є міграції, що очікують". Це, здається, використовується більше як необхідна умова для інших завдань, але я здогадуюсь, що ви могли б використовувати його у своїх цілях.

EDIT: Ось приклад результату після того, як тільки що генерували та не виконували "тестову" міграцію

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.

Я люблю додавати це до оркестрових залежностей між контейнерами для рейок
Вінсент Де Смет

Ще там, у Рейлах 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

Спробуйте граблі -h (допомога) і подивіться на рейку -n (= рейка - пробіг). Тому, ймовірно, щось на кшталт rake -n db: migrate має отримати вам те, що ви хочете.


2
Це не спрацює. Він просто друкує: ** Invoke db: migrate (first_time) ** Invoke environment (first_time) ** Execute (dry run) середовище ** Execute (dry run) db: migrate
jrdioko

2

Можливо, це не те, про що вимагає ОП, але якщо вам просто потрібно швидко перевірити, чи є якась міграція, яка використовується для виконання граблі, не вдаючись до

rake db: migrate: статус | 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

Якщо вам потрібен одношаровий баш, щоб визначити, чи потрібно запускати міграцію чи ні (наприклад, мігрувати лише в команді фази звільнення 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.