Pokaż oczekujące migracje w szynach


Odpowiedzi:


258

rake db:migrate:status(Rails 3 do 5) lub rails db:migrate:status(Rails 5) zrobią to. Zobacz to zatwierdzenie .

upoznacza, że ​​migracja została przeprowadzona. downoznacza, że ​​migracja nie została uruchomiona.


Dostaję Don't know how to build task 'db:migrate:status'na szynach 3.2.8
Peter Ehrlich

1
@PeterEhrlich: Czy to się nie pojawia, rake -Tale inne tak?
jrdioko

2
pakiet exec rake db: migrate: status
Nadeem Yasin

2
Jak odczytujesz wynik tego polecenia? Jeśli stan wiersza to „wyłączony”, czy to oznacza, że ​​jest to migracja oczekująca?
Dennis

12
upoznacza, że ​​migracja została przeprowadzona. downoznacza, że ​​migracja nie została uruchomiona.
Josh

37

Jest rake db:abort_if_pending_migrations(przynajmniej w Railsach 2.3.3, nie jestem pewien, kiedy został wprowadzony). Opis mówi „Zgłasza błąd, jeśli są oczekujące migracje”. Wydaje się, że jest to warunek wstępny dla innych zadań, ale myślę, że możesz go użyć do swoich celów.

EDYCJA: Oto przykład wyniku po właśnie wygenerowaniu, a nie przeprowadzeniu migracji „testowej”

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.

Uwielbiam to dodawać, aby zaaranżować zależności między kontenerami railsowymi
Vincent De Smet

Nadal w Rails 4.1.16
Magne

Działa również na szynach 5.1.3
Wilson Silva

16

To polecenie wyświetli listę wszystkich migracji wraz z ich stanem ( UPlub DOWN)

Szyny 3 i 4

rake db:migrate:status

Szyny 5

rake db:migrate:status

# Or

rails db:migrate:status


6

Działa to dla szyn 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2

Spróbuj rake -h (pomoc) i spójrz na rake -n (= rake --dry-run). Więc prawdopodobnie coś takiego jak rake -n db: migrate powinno dać ci to, czego chcesz.


2
To nie zadziała. Po prostu drukuje: ** Invoke db: migrate (first_time) ** Invoke environment (first_time) ** Execute (dry run) environment ** Execute (dry run) db: migrate
jrdioko

2

Może nie do końca jest to, o co prosi OP, ale jeśli chcesz po prostu szybko sprawdzić, czy jakiekolwiek migracje oczekują na użycie w zadaniu rake, bez uciekania się do

rake db: migrate: status | grep down (może nie działać, jeśli używasz systemu Windows)

ActiveRecord :: Migration.check_pending! (podnosi ActiveRecord :: PendingMigrationError, który musisz uratować)

możesz użyć need_migration? metoda: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class


2
ActiveRecord::Migrator.needs_migration?w Railsach 5.1
niborg

1

Następujące polecenie, aby sprawdzić stan migracji:

rake db:migrate:status

LUB

po uruchomieniu serwera wyświetli się komunikat, aby najpierw przeprowadzić oczekującą migrację.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.