Apakah ada tugas menyapu yang menunjukkan migrasi yang tertunda di aplikasi rel?
Apakah ada tugas menyapu yang menunjukkan migrasi yang tertunda di aplikasi rel?
Jawaban:
rake db:migrate:status
(Rel 3 sampai 5) atau rails db:migrate:status
(Rails 5) akan mencapai ini. Lihat komit ini .
up
berarti migrasi telah dijalankan. down
berarti migrasi belum berjalan.
rake -T
tetapi yang lain melakukannya?
up
berarti migrasi telah dijalankan. down
berarti migrasi belum berjalan.
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.
Perintah ini akan mencantumkan semua migrasi dengan statusnya ( UP
atau DOWN
)
Rel 3 dan 4
rake db:migrate:status
Rel 5
rake db:migrate:status
# Or
rails db:migrate:status
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.
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
ActiveRecord::Migrator.needs_migration?
dalam Rails 5.1
Jika Anda ingin melihat berapa banyak migrasi yang dilakukan atau menunggu, Anda dapat melihat menggunakan perintah di bawah ini.
rails db:migrate:status
Lebih lanjut tentang tautan ini: Rails Active Record Migration
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."
Don't know how to build task 'db:migrate:status'
rel 3.2.8