Saya memiliki berikut file migrasi db\bermigrasi\20100905201547_create_blocks.rb
Bagaimana saya bisa secara khusus rollback bahwa migrasi file?
rake db:rollback STEP=1
Adalah cara untuk melakukan hal ini, jika migrasi anda ingin rollback adalah yang terakhir diterapkan. Anda dapat mengganti 1 untuk namun banyak migrasi yang anda ingin kembali.
Misalnya:
rake db:rollback STEP=5
Juga akan rollback semua migrasi yang terjadi kemudian (4, 3, 2 dan 1).
Untuk memutar kembali semua migrasi kembali ke (dan termasuk) target migrasi, menggunakan: (Ini dikoreksi perintah ditambahkan SETELAH semua komentar yang menunjukkan kesalahan dalam posting asli)
rake db:migrate VERSION=20100905201547
Dalam rangka untuk rollback HANYA SATU migrasi tertentu (OUT OF ORDER) gunakan:
rake db:migrate:down VERSION=20100905201547
Catatan bahwa ini TIDAK akan rollback setiap perantara migrasi -- hanya satu yang terdaftar. Jika itu bukan apa yang anda inginkan, anda dapat dengan aman menjalankan rake db:migrate
dan akan kembali menjalankan hanya satu, melewatkan setiap orang lain yang sebelumnya tidak digulung kembali.
rake db:migrate:down VERSION=20100905201547
akan memutar kembali file tertentu.
Untuk menemukan versi dari semua migrasi, anda dapat menggunakan perintah ini:
rake db:migrate:status
Atau, hanya awalan dari migrasi's nama file adalah versi yang anda butuhkan untuk rollback.
Lihat Ruby on Rails panduan entry pada migrasi.
Untuk rollback migrasi terakhir yang dapat anda lakukan:
rake db:rollback
Jika anda ingin rollback migrasi tertentu dengan versi yang anda harus lakukan:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Misalnya jika versi 20141201122027, anda akan melakukan:
rake db:migrate:down VERSION=20141201122027
untuk rollback bahwa migrasi tertentu.
Anda dapat rollback migrasi anda dengan menggunakan rake db:rollback
dengan pilihan yang berbeda. Sintaks akan berbeda sesuai dengan kebutuhan anda.
Jika anda ingin rollback hanya migrasi terakhir, maka anda dapat menggunakan salah
rake db:rollback
atau
rake db:rollback STEP=1
Jika anda ingin rollback jumlah migrasi sekaligus, maka anda hanya melewati argumen:
rake db:rollback STEP=n
di mana n
adalah jumlah migrasi ke rollback, penghitungan terbaru dari migrasi.
Jika anda ingin rollback untuk migrasi tertentu, maka anda harus lulus versi migrasi sebagai berikut:
rake db:migrate:down VERSION=xxxxx
di mana xxxxx adalah nomor versi dari migrasi.
rake db:migrate:down VERSION=your_migrations's_version_number_here
Versi numerik awalan pada migrasi's file nama
Bagaimana untuk menemukan versi:
Migrasi file disimpan dalam rails_root/db/bermigrasi
direktori. Menemukan file yang tepat untuk anda yang ingin rollback dan copy kode nomor awalan.
misalnya
nama file: 20140208031131_create_roles.rb
kemudian versi 20140208031131
Kembali Rolling terakhir migrasi:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Kembali Rolling terakhir n
jumlah migrasi
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Kembali Rolling migrasi tertentu
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
Untuk rollback migrasi terakhir yang dapat anda lakukan:
rake db:rollback
Jika anda ingin rollback migrasi tertentu dengan versi yang anda harus lakukan:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Jika migrasi file yang ingin anda kembalikan disebut db/migrasi/20141201122027_create_some_table.rb
, maka VERSI yang migrasi 20141201122027
, yang merupakan stempel waktu yang migrasi diciptakan, dan perintah untuk memutar kembali bahwa migrasi akan sama:
rake db:migrate:down VERSION=20141201122027
Jika itu adalah reversibel migrasi dan yang terakhir yang sudah dijalankan, kemudian jalankan rake db:rollback
. Dan anda dapat selalu menggunakan versi.
e.g
migrasi file 20140716084539_create_customer_stats.rb,jadi rollback perintah akan,
rake db:migrate:down VERSION=20140716084539
Dari Rel Guide
Anda dapat menggunakan Active Record's kemampuan untuk rollback migrasi menggunakan kembali
metode:
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
Yang kembali
metode juga menerima sebuah blok instruksi untuk mundur. Ini bisa berguna untuk mengembalikan bagian yang dipilih dari sebelumnya migrasi. Misalnya, let's membayangkan bahwa CreateBlock penting dan kemudian memutuskan cara terbaik untuk menggunakan Active Record validasi, di tempat CHECK kendala, untuk memverifikasi kode pos.
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
Migrasi yang sama juga telah ditulis tanpa menggunakan kembali tapi ini akan melibatkan beberapa langkah: membalikkan urutan create_table dan reversibel, mengganti create_table oleh drop_table, dan akhirnya menggantikan sampai dengan ke bawah dan sebaliknya. Ini semua diambil dari perawatan oleh kembalikan.
Migrasi mengubah keadaan dari database menggunakan perintah
$ bundle exec rake db:migrate
Kami dapat membatalkan satu langkah migrasi menggunakan
$ bundle exec rake db:rollback
Untuk pergi semua jalan kembali ke awal, kita dapat menggunakan
$ bundle exec rake db:migrate VERSION=0
Seperti yang anda duga, mengganti nomor lain untuk 0 bermigrasi ke nomor versi, dimana versi angka yang berasal dari daftar migrasi secara berurutan
Untuk memutar kembali semua migrasi ke versi tertentu (misalnya 20181002222222
), gunakan:
rake db:migrate VERSION=20181002222222
(Catatan bahwa ini menggunakan db:migrate
- bukan db:migrate:down
sebagai jawaban lain untuk pertanyaan ini).
Dengan asumsi migrasi yang ditetapkan versi yang lebih tua dari versi saat ini, ini akan memutar kembali semua migrasi, tapi tidak termasuk, versi yang ditentukan.
Misalnya, jika rake db:migrate:status
awalnya menampilkan:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
Berjalan:
rake db:migrate VERSION=20181002222222
Akan menghasilkan:
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
Referensi: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Nah di rel 5 itu's cukup mudah rake db:migrate:status atau rel db:migrate:status
Itu dimodifikasi untuk menangani keduanya dengan cara yang sama Kemudian hanya memilih Versi mana yang anda ingin memutar kembali dan kemudian jalankan rake db:migrate VERSION=2013424230423
Pastikan VERSI huruf kapital semua
Jika anda memiliki masalah dengan setiap langkah migrasi atau terjebak di tengah hanya pergi untuk migrasi file dan komentar keluar garis-garis yang sudah bermigrasi.
Harapan yang membantu