Perbedaan antara rake db:migrate
dan rake db:reset
cukup jelas di kepala saya. Hal yang saya tidak mengerti adalah betapa rake db:schema:load
berbedanya dengan yang sebelumnya.
Hanya untuk memastikan bahwa saya berada di halaman yang sama:
rake db:migrate
- Menjalankan migrasi yang belum dijalankan.rake db:reset
- Menghapus database (mungkinrake db:drop
+rake db:create
+rake db:migrate
) dan menjalankan migrasi pada database baru.
Tolong bantu untuk menjelaskan, jika pemahaman saya salah.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
sumber
sumber
rake --tasks
membantu?rake db:migrate
itu benar, tetapi pemahaman Anda tentangrake db:reset
itu salah. Lihat jawaban teratas, dari moritz.rails db:migrate
,rails db:reset
,rails db:schema:load
. Lihat stackoverflow.com/questions/38403533/…Jawaban:
db: schema: load menciptakan tabel dan kolom di dalam database (sudah ada) berikut schema.rb
db: setup tidak db: create, db: schema: load, db: seed
Biasanya, Anda akan menggunakan db: migrasi setelah membuat perubahan pada skema melalui file migrasi baru (ini masuk akal hanya jika sudah ada data dalam database). db: schema: load digunakan saat Anda menyiapkan instance baru aplikasi Anda.
Saya harap itu membantu.
PEMBARUAN untuk rel 3.2.12:
Saya baru saja memeriksa sumbernya dan dependensinya seperti ini sekarang:
db: schema: dump membuang skema env saat ini (dan tampaknya juga membuat db)
db: setup berjalan db: skema: load, db: seed
Untuk informasi lebih lanjut silakan lihat di https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (untuk Rails 3.2.x) dan https: // github .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / databases.rake (untuk Rails 4.0.x)
sumber
db:create
jika perlu. Setidaknya pada rel 4.0.2.rake db:migrate
ketika memanggilrake db:setup
jika ada migrasi yang tertunda tetapi tidak akan melakukan migrasi yang tertunda.TLDR
Menggunakan
rake db:migrate
Jika Anda ingin membuat perubahan pada skemarake db:reset
Jika Anda ingin menghapus database, muat ulang skema darischema.rb
, dan masukkan kembali basis datarake db:schema:load
Jika Anda ingin mengatur ulang basis data ke skema sebagaimana diatur dalamschema.rb
(Ini akan menghapus semua data)Penjelasan
rake db:schema:load
akan mengatur skema seperti yang disediakan dalamschema.rb
file. Ini berguna untuk pemasangan aplikasi baru karena tidak memerlukan banyak waktudb:migrate
rake db:migrate
membuat perubahan pada skema yang ada. Ini seperti membuat versi skema.db:migrate
akan mencaridb/migrate/
file ruby dan melakukan migrasi yang belum berjalan dimulai dengan yang tertua. Rails tahu file mana yang tertua dengan melihat stempel waktu di awal nama file migrasi.db:migrate
hadir dengan manfaat bahwa data juga dapat dimasukkan ke dalam basis data. Ini sebenarnya bukan praktik yang baik. Lebih baik digunakanrake db:seed
untuk menambahkan data.rake db:migrate
menyediakan tugas naik , turun dll yang memungkinkan perintah sukarake db:rollback
dan menjadikannya perintah yang paling berguna.rake db:reset
melakukan adb:drop
dandb:setup
menjatuhkan database, membuatnya lagi, memuat skema, dan menginisialisasi dengan data seed
Bagian yang relevan dari perintah dari databases.rake
sumber
Sejauh yang saya mengerti, itu akan menjatuhkan database Anda dan membuatnya kembali berdasarkan
db/schema.rb
file Anda . Itu sebabnya Anda perlu memastikan bahwaschema.rb
file Anda selalu up to date dan di bawah kontrol versi.sumber
Anda bisa melihat dalam tugas Rekam Aktif Rake karena di situlah saya percaya mereka hidup seperti dalam file ini. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
Apa yang mereka lakukan adalah pertanyaan Anda, kan?
Itu tergantung dari mana mereka berasal dan ini adil dan contoh untuk menunjukkan bahwa mereka berbeda tergantung pada tugas. Di sini kita memiliki file berbeda yang penuh dengan tugas.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
yang memiliki tugas-tugas ini.
Ini mungkin tidak menjawab pertanyaan Anda tetapi bisa memberi Anda wawasan untuk melanjutkan dan mencari sumbernya terutama file rake dan tugas. Karena mereka melakukan pekerjaan yang cukup baik dalam membantu Anda menggunakan rel, mereka tidak selalu mendokumentasikan kode dengan baik. Kita semua dapat membantu di sana jika kita tahu apa yang seharusnya dilakukan.
sumber
DIPERBARUI untuk Rails 5:
db:create
- Membuat database untuk lingkungan RAILS_ENV saat ini . Jika RAILS_ENV tidak ditentukan, standarnya adalah pengembangan dan pengujian basis data.db:create:all
- Membuat database untuk semua lingkungan.db:drop
- Drops database untuk lingkungan RAILS_ENV saat ini . Jika RAILS_ENV tidak ditentukan, standarnya adalah pengembangan dan pengujian basis data.db:drop:all
- Menjatuhkan basis data untuk semua lingkungan.db:migrate
- Menjalankan migrasi untuk lingkungan saat ini yang belum berjalan. Secara default itu akan menjalankan migrasi hanya di lingkungan pengembangan.db:migrate:redo
- Menjalankan db: bermigrasi: turun dan db: bermigrasi: naik atau db: bermigrasi: rollback dan db: bermigrasi: naik tergantung pada migrasi yang ditentukan.db:migrate:up
- Menjalankan VERSI migrasi yang diberikan.db:migrate:down
- Menjalankan turun untuk VERSI migrasi yang diberikan.db:migrate:status
- Menampilkan status migrasi saat ini.db:migrate:rollback
- Putar kembali migrasi terakhir.db:version
- Mencetak versi skema saat ini.db:forward
- Mendorong skema ke versi berikutnya.db:seed
- Menjalankan file db / seeds.rb .db:schema:load
Menciptakan basis data dari file schema.rb .db:schema:dump
Membuang skema lingkungan saat ini ke db / schema.rb .db:structure:load
- Menciptakan basis data dari file structure.sql .db:structure:dump
- Membuang skema lingkungan saat ini ke db / structure.sql . (Anda dapat menentukan file lain denganSCHEMA=db/my_structure.sql
)db:setup
Menjalankan db: buat , db: skema: memuat dan db: seed .db:reset
Menjalankan db: drop dan db: setup .db:migrate:reset
- Menjalankan db: drop , db: create dan db: migrate .db:test:prepare
- Periksa migrasi yang tertunda dan muat skema pengujian. (Jika Anda menjalankan rake tanpa argumen apa pun, itu akan melakukan ini secara default.)db:test:clone
- Menciptakan basis data uji dari skema basis data lingkungan saat ini.db:test:clone_structure
- Mirip dengan db: test: clone , tetapi itu akan memastikan bahwa database pengujian Anda memiliki struktur yang sama, termasuk rangkaian karakter dan kumpulan, sebagai basis data lingkungan Anda saat ini.db:environment:set
- Atur lingkungan RAILS_ENV saat ini di ar_internal_metadata tabel . (Digunakan sebagai bagian dari pemeriksaan lingkungan yang dilindungi.)db:check_protected_environments
- Memeriksa apakah tindakan destruktif dapat dilakukan di lingkungan RAILS_ENV saat ini . Digunakan secara internal ketika menjalankan tindakan destruktif seperti db: drop atau db: schema: load .sumber