Saya ingin menghapus / menghapus file migrasi. Bagaimana saya akan melakukan itu? Saya tahu ada pertanyaan serupa di sini tetapi sebagai pembaruan, apakah ada cara yang lebih baik daripada melakukan skrip / hancurkan?
Selain itu, haruskah saya melakukan db:reset
atau db:drop
jika saya menghapus / menghapus migrasi?
ruby-on-rails
ruby-on-rails-3
file-io
alvincrespo.dll
sumber
sumber
self.down
metode yang ditentukan pada migrasi Anda untuk "menurunkan versi" database Anda.rake db:migrate:status
akan menunjukkan ID dari file yang hilang, yang dapat Anda gunakan untuk membuatnya kembali. Setelah itu kembali, Anda dapat mengikuti saran jawaban ini untuk kemenangan.db:migrate:status
adalah penyelamat hidup!Cara lain untuk menghapus migrasi:
Gunakan sebelum
rake db:migrate
dijalankan karena perubahan dalam database akan tetap selamanya :) - atau hapus perubahan secara manualsumber
Jalankan di bawah perintah dari direktori home aplikasi:
rake db:migrate:down VERSION="20140311142212"
(di sini versi adalah stempel waktu yang diawali dengan rail saat migrasi dibuat. Tindakan ini akan mengembalikan perubahan DB karena migrasi ini)Run "rails destroy migration migration_name"
(nama_migrasi adalah satu-satunya penggunaan yang dipilih saat membuat migrasi. Hapus " timestamp_ " dari nama file migrasi Anda untuk mendapatkannya)sumber
rails d migration migration_name
Anda juga dapat menjalankan migrasi ke bawah seperti:
Lihat panduan Ruby on Rails tentang migrasi untuk info lebih lanjut.
sumber
Kita bisa menggunakan,
Yang akan menghapus migrasi.
sumber
Kadang-kadang saya menemukan diri saya menghapus file migrasi dan kemudian menghapus entri yang sesuai di tabel schema_migrations dari database. Tidak cantik tapi berhasil.
sumber
Ini juga berfungsi di Rails 5.
Jika migrasi adalah yang terbaru, Anda dapat menghapus kolom database yang ditambahkan oleh migrasi dengan melakukan:
kemudian hapus file migrasi itu sendiri dengan menjalankan:
sumber
Lihat 4.1 Rolling Back
http://guides.rubyonrails.org/migrations.html
$ rake db: kembalikan
sumber
Tak satu pun dari jawaban ini sesuai dengan masalah yang saya alami karena migrasi yang ingin saya hapus tidak ada: Saya telah membuat dan menjalankan migrasi di beberapa cabang lain, yang kemudian dibuang. Masalahnya adalah saat migrasi dijalankan, rails menambahkan versi ke dalam
schema_migrations
tabel di database. Jadi meskipun tidak terdaftar dalam struktur atau skema db Anda, rel akan mencarinya. Anda dapat mengungkapkan migrasi yatim piatu ini dengan menjalankan:rails db:migrate:status
Perhatikan versi migrasi yang hilang dan masuk ke konsol db:
rails dbconsole
Sekarang hapus versi dari tabel migrasi secara manual:
delete from schema_migrations where version='<version>';
Anda sekarang harus menjadi baik.
sumber
Saya baru saja mengalami masalah yang sama:
Itu memperbaikinya untuk saya
sumber
Catatan Samping: Mulai dari rel 5.0.0
rake
telah diubah menjadirails
Jadi lakukan hal berikutrails db: migrasi VERSION = 0
sumber