Pokaż oczekujące migracje w szynach

162

Czy istnieje zadanie prowizji, które pokazuje oczekujące migracje w aplikacji railsowej?

Tylko czytać
źródło

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.

jrdioko
źródło
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.
theIV
źródło
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
Deepak Mahakale
źródło
15

rake db:version zrobi to na Railsach 2.

gerryster
źródło
Obowiązuje również na torach 3.2.18
Ian Vaughan
6

Działa to dla szyn 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?
Sairam
źródło
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.

John Lockwood
źródło
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

wondersz1
źródło
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ę.

puneet18
źródło
1

Jeśli chcesz zobaczyć, ile migracji jest zrobione lub oczekujące, możesz zobaczyć, używając poniższego polecenia.

rails db:migrate:status

Więcej na ten link: Rails Active Record Migration

Foram Thakral
źródło
1

Jeśli potrzebujesz jednowierszowego kodu bash, aby określić, czy uruchomić migrację, czy nie (np. Migrować tylko w poleceniu fazy wydania Heroku, gdy istnieje oczekująca migracja), działa to:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
niborg
źródło