Cara mengembalikan hanya satu langkah menggunakan rake db: migrasi

196

Setelah menambahkan file migrasi di db/migratefolder dan menjalankan rake db:migrate, saya ingin kembali ke langkah sebelumnya, saya pikir menggunakan VERSION=nadalah cara yang tepat untuk melakukan itu, tetapi saya tidak tahu nilai yang benar dari n untuk digunakan. Apakah ada perintah untuk memeriksa nilai n saat ini?

Alangkah baiknya jika ada yang bisa memberikan instruksi lengkap tentang cara menggunakan rake db:migrate.

mko
sumber

Jawaban:

355

Sebagai permulaan

rake db:rollback akan membuat Anda kembali satu langkah

kemudian

rake db:rollback STEP=n

Akan mengembalikan Anda nmigrasi di mana njumlah migrasi terbaru yang ingin Anda kembalikan.

Lebih banyak referensi di sini .

rwilliams
sumber
95

Kembalikan migrasi terbaru:

rake db:rollback

Kembalikan nmigrasi terbaru:

rake db:rollback STEP=n

Anda dapat menemukan instruksi lengkap tentang penggunaan tugas migrasi Rails untuk menyapu pada Rails Guide untuk menjalankan migrasi .


Inilah beberapa lagi:

  • rake db:migrate - Jalankan semua migrasi yang belum pernah berjalan
  • rake db:migrate VERSION=20080906120000 - Jalankan semua migrasi yang diperlukan (atas atau bawah) untuk mendapatkan versi yang diberikan
  • rake db:migrate RAILS_ENV=test - Jalankan migrasi di lingkungan yang diberikan
  • rake db:migrate:redo - Kembalikan satu migrasi dan jalankan lagi
  • rake db:migrate:redo STEP=n- Kembalikan nmigrasi terakhir dan jalankan lagi
  • rake db:migrate:up VERSION=20080906120000- Jalankan upmetode untuk migrasi yang diberikan
  • rake db:migrate:down VERSION=20080906120000- Jalankan downmetode untuk migrasi yang diberikan

Dan untuk menjawab pertanyaan Anda tentang dari mana Anda mendapatkan nomor versi migrasi dari:

Versi ini adalah awalan angka pada nama file migrasi. Misalnya, untuk bermigrasi ke versi 20080906120000 dijalankan

$ rake db:migrate VERSION=20080906120000

(Dari Menjalankan Migrasi di Panduan Rel)

Ajedi32
sumber
2
Ketika rake db: rollback tidak berfungsi untuk mengembalikan migrasi yang paling baru, saya harus menggunakan rake db: migrasi VERSION = <tanggal versi terakhir kedua> dan itu bekerja dengan baik
Omni
8

Cara terbaik adalah menjalankan migrasi khusus lagi dengan menggunakan turun atau naik (di rel 4. Itu berubah)

rails db: migrate: up VERSION = timestamp

Sekarang bagaimana Anda mendapatkan cap waktu. Pergi ke jalan ini

/ db / bermigrasi

Identifikasi file migrasi yang ingin Anda kembalikan. Ambil cap waktu dari nama file itu.

Hemali
sumber
Meskipun ini tidak menjawab pertanyaan, itu memang cara terbaik. Melangkah mundur dengan langkah-langkah dapat menyebabkan kesalahan, terutama ketika mengerjakan perangkat lunak dalam kelompok.
baja
5

Jika versinya adalah 20150616132425, maka gunakan:

rails db:migrate:down VERSION=20150616132425
Đoàn Nghĩa
sumber
1

Orang lain telah menjawab Anda cara mengembalikan, tetapi Anda juga bertanya bagaimana Anda dapat mengidentifikasi nomor versi migrasi.

  • rake db:migrate:status memberikan daftar versi, nama, dan status migrasi Anda (naik atau turun)
  • Anda juga dapat menemukan file migrasi, yang berisi cap waktu di nama file, yaitu nomor versi. Migrasi terletak di folder:/db/migrate
BjarneD
sumber
Omong-omong jika Anda menjalankan perintah status, Anda mungkin melihat baris seperti: ********** TANPA FILE ********** Migrasi tersebut tidak ada di cabang Anda saat ini jika Anda menggunakan git.
BjarneD