Saya memiliki dev Ruby on Rails database penuh dengan data. Saya ingin menghapus semuanya dan membangun kembali basis data. Saya sedang berpikir untuk menggunakan sesuatu seperti:
rake db:recreate
Apakah ini mungkin?
ruby-on-rails
ruby-on-rails-3
rake
AnApprentice
sumber
sumber
rake db:drop db:create db:schema:load
mungkin lebih tepat daripadarake db:drop db:create db:migrate
(meskipun saya siap salah tentang itu).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Saya biasanya menggunakandb:schema:load
, ketika migrasi rusak. Saya jarang perlu membuat ulang basis data, jadi kecepatan tidak terlalu menjadi masalah. Juga, jika Anda memiliki migrasi yang belum diterapkan ,db:schema:load
dandb:reset
tidak akan menerapkannya. Tidak yakin apakah itu banyak argumen.Jawaban:
Saya tahu dua cara untuk melakukan ini:
Ini akan mengatur ulang basis data Anda dan memuat kembali skema Anda saat ini dengan semua:
Ini akan menghancurkan db Anda dan kemudian membuatnya dan kemudian memigrasi skema Anda saat ini:
Semua data akan hilang di kedua skenario.
sumber
rake db:reset
juga menjalankan semua migrasi (setidaknya di Rails 3), sehingga harus menjadi semua yang diperlukan, bukan?rake db:test:prepare
pengujian, atau Anda akan mendapatkan kesalahan seperti:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
danrake db:drop db:create db:migrate
melakukan dua hal yang berbeda . Yang terakhir menghapus seluruh database aplikasi, membuatnya kembali dan kemudian pergi melalui setiap migrasi untuk memperbarui skema (db/schema.rb
ataudb/structure.sql
), tetapi tidak mengisinya dengan data seed. Alih-alih yang pertama adalah alias untukrake db:drop db:schema:load db:seed
, sehingga menghapus seluruh database aplikasi tetapi tidak memperbarui skema , dan kemudian mengisi dengan data seed. Jadi, jika Anda belum mengubah apa pun dalam migrasi Anda, yang pertama lebih cepat, yang terakhir lebih aman.Pada Rails 4, yang dibutuhkan hanyalah
Itu akan menghapus seluruh konten pada DB Anda dan membuat ulang skema dari file schema.rb Anda, tanpa harus menerapkan semua migrasi satu per satu.
sumber
db:drop
dandb:create
berlebihan.Saya menggunakan liner berikut di Terminal.
Saya menempatkan ini sebagai shell alias dan menamainya
remigrate
Sekarang, Anda dapat dengan mudah "rantai" tugas Rails:
sumber
db:reset
, yang hanya Google (atau memeriksa Panduan ) jauhnya. Komentar saya bukan untuk menyarankan untuk tidak menggunakan itu, tetapi untuk menghindari menggunakandb:migrate
ketika apa yang Anda inginkan sebenarnyadb:schema:load
.rake
, seperti:rake db:drop db:create db:schema:load
.db:migrate
... padahaldb:schema:load
sensitif terhadap seseorang yang lupa memeriksa skema.rb ke dalam kontrol versi bersama migrasi baru.Pembaruan: Di Rails 5, perintah ini akan dapat diakses melalui perintah ini:
rails db:purge db:create db:migrate RAILS_ENV=test
Pada rilis terbaru rails 4.2 Anda sekarang dapat menjalankan:
Sumber: komit
Ini dapat digunakan bersama seperti yang disebutkan di atas:
sumber
db:purge
"hapus semua data tetapi pertahankan semua tabel dan kolom"db:purge
tidak menjaga tabel.Tergantung pada apa yang Anda inginkan, Anda dapat menggunakan ...
rake db:create
... untuk membangun basis data dari awal
config/database.yml
, atau ...rake db:schema:load
... untuk membangun database dari awal dari
schema.rb
file Anda .sumber
Dari jalankan baris perintah
sumber
schema.rb
dan jika Anda hanyadrop
dancreate
,migrate
tidak akan melakukan apa pun (diuji pada rel 6)Gunakan seperti
Semua dalam satu baris. Ini lebih cepat karena lingkungan tidak dimuat ulang lagi dan lagi.
db: drop - akan menjatuhkan basis data.
db: create - will create database (host / db / password akan diambil dari config / database.yml)
db: migrate - akan menjalankan migrasi yang ada dari direktori (db / migrasi / .rb) *.
db: seed - akan menjalankan data seed yang mungkin dari direktori (db / migrasi / seed.rb) ..
Saya biasanya lebih suka:
untuk melakukan semuanya sekaligus.
Bersulang!
sumber
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Cukup keluarkan urutan langkah-langkahnya: jatuhkan basis data, lalu buat kembali itu lagi, migrasikan data, dan jika Anda memiliki benih, taburkan basis data:
Karena lingkungan default untuk pengembangan
rake
adalah , jika Anda melihat pengecualian dalam tes spec, Anda harus membuat ulang db untuk lingkungan pengujian sebagai berikut:Dalam kebanyakan kasus, basis data pengujian ditabur selama prosedur pengujian, sehingga
db:seed
tindakan tugas tidak perlu dilewatkan. Jika tidak, Anda harus menyiapkan basis data:atau
Selain itu, untuk menggunakan tugas buat ulang Anda dapat menambahkan ke dalam Rakefile kode berikut:
Lalu terbitkan:
sumber
Anda dapat melakukannya secara manual:
Atau adil
rake db:reset
, yang akan menjalankan langkah-langkah di atas tetapi juga akan menjalankandb/seeds.rb
file Anda .Nuansa yang ditambahkan adalah bahwa
rake db:reset
memuat langsung darischema.rb
file Anda sebagai lawan menjalankan semua file migrasi lagi.Data Anda akan terpesona dalam semua kasus.
sumber
Anda dapat menggunakan baris perintah berikut:
sumber
Untuk menjatuhkan basis data tertentu, Anda dapat melakukan ini di konsol rel:
Dan kemudian migrasi DB lagi
sumber
Pada rel 4.2, untuk menghapus semua data tetapi mempertahankan database
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
sumber
Anda dapat menggunakan
db:reset
- untuk menjalankan db: drop dan db: setup ataudb:migrate:reset
- yang menjalankan db: drop, db: create dan db: migrate.tergantung pada Anda ingin menggunakan schema.rb ada
sumber
Menurut panduan Rails , liner satu ini harus digunakan karena akan memuat dari
schema.rb
alih - alih memuat ulang file migrasi satu per satu:sumber
Karena dalam pengembangan, Anda selalu ingin membuat ulang basis data, Anda dapat menentukan tugas rake di folder lib / tugas Anda seperti itu.
dan di terminal Anda akan lari
itu akan membangun kembali basis data Anda
sumber
Saya pikir cara terbaik untuk menjalankan perintah ini:
sumber
Cukup Anda bisa lari
rake db:setup
Ini akan menjatuhkan basis data, membuat basis data baru dan mengisi db dari seed jika Anda membuat file seed dengan beberapa data.
sumber
3 opsi, hasil yang sama:
1. Semua langkah:
2. Reset:
3. Bermigrasi: reset:
Catatan:
sumber
Saya hari ini telah membuat beberapa perubahan pada skema rel saya. Saya menyadari bahwa saya membutuhkan dua model tambahan dalam hierarki dan beberapa lainnya harus dihapus. Ada banyak perubahan kecil yang diperlukan untuk model dan pengontrol.
Saya menambahkan dua model baru dan membuatnya, menggunakan:
Kemudian saya mengedit file schema.rb. Saya secara manual menghapus model lama yang tidak lagi diperlukan, mengubah bidang kunci asing seperti yang diperlukan dan hanya memesannya kembali sedikit agar lebih jelas bagi saya. Saya menghapus semua migrasi, dan menjalankan ulang build melalui:
Itu bekerja dengan sempurna. Semua data harus dimuat ulang, tentu saja. Rails menyadari bahwa migrasi telah dihapus dan mengatur ulang tanda air tinggi:
sumber