Saya memiliki file migrasi berikut db\migrate\20100905201547_create_blocks.rb
Bagaimana saya dapat secara khusus mengembalikan file migrasi itu?
ruby-on-rails
schema
database-schema
rollback
AnApprentice
sumber
sumber
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-fileJawaban:
Adalah cara untuk melakukan ini, jika migrasi yang ingin Anda kembalikan adalah yang terakhir diterapkan. Anda dapat mengganti 1 untuk berapa banyak migrasi yang ingin Anda kembali.
Sebagai contoh:
Juga akan mengembalikan semua migrasi yang terjadi nanti (4, 3, 2 dan juga 1).
Untuk mengembalikan semua migrasi kembali ke (dan termasuk) migrasi target, gunakan: (Perintah terkoreksi ini ditambahkan SETELAH semua komentar yang menunjukkan kesalahan dalam posting asli)
Untuk mengembalikan HANYA SATU migrasi tertentu (OUT OF ORDER) gunakan:
Perhatikan bahwa ini TIDAK akan mengembalikan setiap migrasi perantara - hanya yang terdaftar. Jika bukan itu yang Anda maksudkan, Anda dapat menjalankannya dengan aman
rake db:migrate
dan hanya akan menjalankannya kembali, melewatkan yang lainnya yang sebelumnya tidak diputar.Dan jika Anda ingin memigrasi satu migrasi saja, ada juga kebalikannya
db:migrate:up
:sumber
STEP=-1
. Saya melakukannya sekali dan itu menjadi gila, memutar kembali semuanya. Tidak baik! Ini adalah Rails 4.2 - Saya kira mungkin sudah diperbaiki sekarang.akan memutar kembali file tertentu.
Untuk menemukan versi semua migrasi, Anda dapat menggunakan perintah ini:
Atau, awalan dari nama file migrasi adalah versi yang Anda harus kembalikan.
Lihat entri panduan Ruby on Rails tentang migrasi.
sumber
Untuk mengembalikan migrasi terakhir yang dapat Anda lakukan:
Jika Anda ingin mengembalikan migrasi tertentu dengan versi yang harus Anda lakukan:
Misalnya, jika versinya 20141201122027, Anda akan melakukan:
untuk mengembalikan migrasi spesifik itu.
sumber
Anda dapat mengembalikan migrasi dengan menggunakan
rake db:rollback
berbagai opsi. Sintaks akan berbeda sesuai dengan kebutuhan Anda.Jika Anda ingin mengembalikan hanya migrasi terakhir, maka Anda dapat menggunakan keduanya
atau
Jika Anda ingin mengembalikan jumlah migrasi sekaligus, maka Anda cukup memberikan argumen:
di mana
n
jumlah migrasi ke rollback, dihitung dari migrasi terbaru.Jika Anda ingin mengembalikan ke migrasi tertentu, maka Anda harus meneruskan versi migrasi sebagai berikut:
di mana xxxxx adalah nomor versi migrasi.
sumber
rake db:migrate:down VERSION=your_migrations's_version_number_here
Versi ini adalah awalan angka pada nama file migrasi
Cara menemukan versi :
File migrasi Anda disimpan di
rails_root/db/migrate
direktori Anda . Temukan file yang sesuai yang ingin Anda kembalikan dan salin nomor awalannya.sebagai contoh
nama file:
20140208031131_create_roles.rb
maka versinya adalah20140208031131
sumber
rake db:migrate:status
Meluncurkan kembali migrasi terakhir:
Mengembalikan
n
jumlah migrasi terakhirMengembalikan migrasi tertentu
sumber
Untuk mengembalikan migrasi terakhir yang dapat Anda lakukan:
Jika Anda ingin mengembalikan migrasi tertentu dengan versi yang harus Anda lakukan:
Jika file migrasi yang ingin Anda kembalikan dipanggil
db/migrate/20141201122027_create_some_table.rb
, maka VERSI untuk migrasi itu adalah20141201122027
, yang merupakan cap waktu kapan migrasi itu dibuat, dan perintah untuk mengembalikan migrasi itu adalah:sumber
Jika ini adalah migrasi reversibel dan yang terakhir yang telah dieksekusi, maka jalankan
rake db:rollback
. Dan Anda selalu dapat menggunakan versi. misalnyafile migrasi adalah 20140716084539_create_customer_stats.rb, jadi perintah rollback adalah,
rake db:migrate:down VERSION=20140716084539
sumber
Untuk mengembalikan semua migrasi ke versi tertentu (mis.
20181002222222
), Gunakan:(Perhatikan bahwa ini menggunakan
db:migrate
- bukandb:migrate:down
seperti pada jawaban lain untuk pertanyaan ini.)Dengan asumsi versi migrasi yang ditentukan lebih tua dari versi saat ini, ini akan memutar kembali semua migrasi hingga, tetapi tidak termasuk, versi yang ditentukan.
Misalnya, jika
rake db:migrate:status
awalnya menampilkan:Berlari:
Akan menghasilkan:
Referensi: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
sumber
Dari Rails Guide
Mengembalikan Migrasi Sebelumnya
Anda dapat menggunakan kemampuan Rekaman Aktif untuk mengembalikan migrasi menggunakan
revert
metode:The
revert
Metode juga menerima blok instruksi untuk mundur. Ini bisa berguna untuk mengembalikan bagian-bagian tertentu dari migrasi sebelumnya. Misalnya, mari kita bayangkan bahwa CreateBlock dikomit dan kemudian diputuskan akan lebih baik untuk menggunakan validasi Rekaman Aktif, sebagai pengganti batasan PERIKSA, untuk memverifikasi kode pos.Migrasi yang sama juga bisa ditulis tanpa menggunakan revert, tetapi ini akan melibatkan beberapa langkah lagi: membalik urutan create_table dan reversibel, mengganti create_table dengan drop_table, dan akhirnya mengganti naik turun dan sebaliknya. Ini semua diurus dengan mengembalikan.
sumber
Migrasi mengubah status basis data menggunakan perintah
Kami dapat membatalkan satu langkah migrasi menggunakan
Untuk kembali ke awal, kita bisa menggunakan
Seperti yang Anda tebak, mengganti nomor lain dengan 0 bermigrasi ke nomor versi itu, tempat nomor versi berasal dari daftar migrasi secara berurutan
sumber
Nah di rails 5, cukup mudah rake db: migrate: status atau rails db: migrate: status
Itu dimodifikasi untuk menangani keduanya dengan cara yang sama. Kemudian pilih saja Versi mana yang ingin Anda putar kembali dan kemudian jalankan rake db: migrate VERSION = 2013424230423
Pastikan VERSION adalah huruf kapital semua
Jika Anda memiliki masalah dengan langkah migrasi apa pun atau macet di tengah, buka saja file migrasi dan beri komentar pada baris yang sudah dimigrasi.
Semoga itu bisa membantu
sumber
Jika Anda ingin mengembalikan dan bermigrasi, Anda dapat menjalankan:
Itu sama dengan:
sumber