Saya mencoba menjalankan hanya satu migrasi dari sejumlah besar di aplikasi rel saya. Bagaimana saya bisa melakukan ini? Saya tidak ingin menjalankan migrasi apa pun sebelum atau sesudahnya. Terima kasih.
ruby-on-rails
database
migration
rake
Segera
sumber
sumber
STEP=n
argumen kedb:migrate
(di manan
jumlah migrasi yang akan dijalankan, seperti yang adadb:rollback
) - maka Anda dapat melakukannyarake db:migrate STEP=1
ataurake db:migrate STEP=2
, dll.Jawaban:
rake db:migrate:redo VERSION=xxxxxxx
, tapi itu akan menjalankandown
dan kemudianup
langkah tersebut. Anda dapat melakukan ini bersama dengan mengomentari langkah turun untuk sementara.sumber
rake -T
.db:test:prepare
juga tidak muncul di daftar itu. Tuhan, aku terlambat ke pesta.rake db:migrate:up VERSION=my_version
tidak dapat melakukan apa - apa , karena tabel schema_migrations masih mengatakan bahwa tabel tersebut telah dijalankan. Dalam situasi yang samarake db:migrate:redo VERSION=my_version
mungkin gagal karena tidak dapat menjatuhkan tabel. Dalam kasus ini, komentaridown
metode dalam migrasi untuk sementara dan jalankan kembalirake db:migrate:redo...
demikian pula
rake db:migrate:down
untuk menghapus migrasi tertentu. Anda bisa mendapatkan daftar tugas rake yang tersedia denganrake -T
.sumber
VERSION
disebutkan di sini adalah nilai integer di awal setiap file migrasi Anda (yang merupakan stempel waktu saat dibuat). MisalnyaVERSION=20150720023630
,.VERSION
ini hanyalah variabel lingkungan sehingga dapat muncul terlebih dahulu dalam perintah atau bahkan diatur sebelumnya ke perintah:VERSION=1234567890 rake db:migrate:up
Saya harus menjalankan satu migrasi yang berubah dan perlu dijalankan kembali secara independen dari semua migrasi lainnya. Jalankan konsol dan lakukan ini:
Lebih bermanfaat lagi ini bisa dimasukkan ke dalam tugas menyapu dll.
sumber
change
, jalankanYourMigrations.migrate(:up)
sebagai gantinya (atau:down
juga!)require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate:up VERSION=version_no
Akan memigrasi (menambah) skrip migrasi tertentu
rake db:migrate:down VERSION=version_no
Akan menghapus skrip migrasi tertentu
sumber
cobalah itu.
sumber
VERSION
hanya variabel lingkungan sehingga dapat muncul terlebih dahulu dalam perintah atau bahkan diatur sebelumnya ke perintah:VERSION=20098252345 rake db:migrate
Ingatlah untuk memberi tanda kutip di sekitar xxxx, xxxx adalah stempel waktu (atau ID Migrasi) untuk migrasi Anda.
Anda dapat memeriksa stempel waktu (ID Migrasi) untuk migrasi sebelumnya yang Anda lakukan dengan menggunakan
sumber
Memperluas jawaban dengan korch di atas,
require
tidak berhasil untuk saya, tetapiload
berhasil. Untuk lebih konkretnya, untuk file migrasi:di pengetikan konsol
bekerja untuk saya.
Ini untuk ruby 1.9.3p484 (revisi 2013-11-22 43786) [x86_64-linux] dan Rails 3.2.13.
sumber
Menambahkan 2 ¢ saya ke ini karena saya mengalami masalah yang sama:
Jika Anda benar-benar ingin menjalankan migrasi lagi tanpa membuat yang baru, Anda dapat melakukan hal berikut:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
Dan rel akan "lupa" bahwa ia menjalankan migrasi untuk 20150105181157. Sekarang ketika Anda menjalankan db: migrate, ia akan menjalankannya lagi.
Ini hampir selalu merupakan ide yang buruk. Satu contoh yang masuk akal adalah jika Anda memiliki cabang pengembangan dan Anda belum menyempurnakan migrasi Anda dan ingin menambahkan beberapa hal ke dalamnya dalam pengembangan. Namun meskipun demikian, lebih baik melakukan migrasi 2 arah sehingga Anda dapat melakukan rollback dan coba lagi dengan benar.
sumber
Pasti ada cara untuk menjalankan kelas migrasi melalui konsol. Sepertinya saya tidak bisa membuat kode migrasi dikenali.
Namun, seperti yang ditunjukkan oleh komentar, lebih disukai untuk menjalankan migrasi secara berurutan. Menggunakan:
Salin dan tempel kode Anda saat migrasi ke skrip / konsol?
sumber
Saya memiliki metode utilitas yang membuatnya sangat mudah dalam pengembangan. Saya menemukan bahwa ini membantu saya menghindari membuat terlalu banyak migrasi - biasanya saya memodifikasi migrasi sampai mereka telah diterapkan.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
sumber
Saya menggunakan teknik ini dalam pengembangan ketika saya mengubah migrasi dalam jumlah yang signifikan, dan saya tidak ingin bermigrasi sedikit pun dan kehilangan data apa pun di dalamnya (terutama saat saya mengimpor data lama yang membutuhkan waktu lama Saya tidak ingin mengimpor ulang lagi).
Ini 100% hackish dan saya pasti tidak akan merekomendasikan melakukan ini dalam produksi, tetapi itu akan berhasil:
sumber