Tampilkan migrasi yang tertunda di rel


Jawaban:


258

rake db:migrate:status(Rel 3 sampai 5) atau rails db:migrate:status(Rails 5) akan mencapai ini. Lihat komit ini .

upberarti migrasi telah dijalankan. downberarti migrasi belum berjalan.


Saya mendapatkan Don't know how to build task 'db:migrate:status'rel 3.2.8
Peter Ehrlich

1
@PeterEhrlich: Apakah itu tidak muncul rake -Ttetapi yang lain melakukannya?
jrdioko

2
bundle exec rake db: migrate: status
Nadeem Yasin

2
Bagaimana Anda membaca output dari perintah ini? Jika status baris "turun", apakah itu berarti migrasi yang tertunda?
Dennis

12
upberarti migrasi telah dijalankan. downberarti migrasi belum berjalan.
Josh

37

Ada rake db:abort_if_pending_migrations(setidaknya di Rails 2.3.3, tidak yakin kapan diperkenalkan). Deskripsi mengatakan 'Meningkatkan kesalahan jika ada migrasi yang tertunda'. Ini tampaknya lebih digunakan sebagai prasyarat untuk tugas-tugas lain, tapi saya kira Anda bisa menggunakannya untuk tujuan Anda.

EDIT: Berikut adalah contoh dari output setelah baru saja dibuat dan tidak menjalankan migrasi 'test'

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.

Saya suka menambahkan ini untuk mengatur ketergantungan antara wadah rel
Vincent De Smet

Masih ada di Rails 4.1.16
Magne

Bekerja di rel 5.1.3 juga
Wilson Silva

16

Perintah ini akan mencantumkan semua migrasi dengan statusnya ( UPatau DOWN)

Rel 3 dan 4

rake db:migrate:status

Rel 5

rake db:migrate:status

# Or

rails db:migrate:status


6

Ini berfungsi untuk rel 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2

Coba rake -h (bantuan) dan lihatlah rake -n (= rake --dry-run). Jadi mungkin sesuatu seperti rake -n db: migrasi harus memberikan apa yang Anda inginkan.


2
Itu tidak akan berhasil. Itu hanya mencetak: ** Panggil db: bermigrasi (first_time) ** Panggil lingkungan (first_time) ** Jalankan lingkungan (jalankan kering) ** Jalankan (dry run) db: bermigrasi
jrdioko

2

Mungkin bukan apa yang diminta OP, tetapi jika Anda hanya perlu dengan cepat memeriksa apakah ada migrasi yang menunggu untuk digunakan dalam tugas menyapu, tanpa menggunakan

rake db: migrasi: status | grep down (mungkin tidak berfungsi jika Anda menggunakan Windows)

ActiveRecord :: Migration.check_pending! (memunculkan ActiveRecord :: PendingMigrationError yang perlu Anda selamatkan)

Anda dapat menggunakan needs_migration? metode: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class


2
ActiveRecord::Migrator.needs_migration?dalam Rails 5.1
niborg

1

Perintah berikut untuk memeriksa status migrasi:

rake db:migrate:status

ATAU

ketika Anda menjalankan server Anda, itu akan menampilkan pesan untuk menjalankan migrasi Anda yang tertunda terlebih dahulu.



1

Jika Anda memerlukan bash one-liner untuk menentukan apakah akan menjalankan migrasi atau tidak (mis., Hanya bermigrasi dalam perintah fase rilis Heroku ketika ada migrasi yang tertunda), ini berfungsi:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.