Elimina o ricrea un database Ruby on Rails

Ho un database Ruby on Rails pieno di dati. Voglio cancellare tutto e ribuild il database. Sto pensando di usare qualcosa come:

rake db:recreate 

È ansible?

Conosco due modi per farlo:

Questo ripristinerà il tuo database e ricaricherà il tuo schema attuale con tutti:

 rake db:reset db:migrate 

Questo distruggerà il tuo db e poi lo creerà e quindi migrerà il tuo schema attuale:

 rake db:drop db:create db:migrate 

Tutti i dati andranno persi in entrambi gli scenari.

Su Rails 4, tutto ciò che serve è

 $ rake db:schema:load 

Questo eliminerebbe l’intero contenuto sul DB e ricreare lo schema dal file schema.rb, senza dover applicare tutte le migrazioni una alla volta.

Io uso il seguente liner in Terminal.

 $ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare 

L’ho inserito come alias di shell e l’ho chiamato remigrate

A questo punto, puoi facilmente “concatenare” le attività di Rails:

 $ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+ 

Aggiornamento: con l’avvento di Rails 5, questo comando sarà accessibile tramite questo comando:

rails db: purge db: crea db: migrate RAILS_ENV = test


A partire dalla release più recente di rail 4.2 ora puoi eseguire:

 rake db:purge 

Fonte: commit

 # desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases." task :purge => [:load_config] do ActiveRecord::Tasks::DatabaseTasks.purge_current end 

Può essere usato insieme come sopra menzionato:

 rake db:purge db:create db:migrate RAILS_ENV=test 

A seconda di cosa vuoi, puoi usare …

rake db:create

… per creare il database da zero da config/database.yml , o …

rake db:schema:load

… per creare il database da zero dal file schema.rb .

È sufficiente pubblicare la sequenza dei passaggi: rilasciare il database, quindi ricrearlo di nuovo, migrare i dati e, se si dispone di seed, seminare il database:

 rake db:drop db:create db:migrate db:seed 

Poiché l’ambiente predefinito per rake è lo sviluppo , nel caso in cui si veda l’eccezione nei test delle specifiche, è necessario ricreare db per l’ambiente di test come segue:

 RAILS_ENV=test rake db:drop db:create db:migrate 

Nella maggior parte dei casi il database di test viene seminato durante le procedure di test, quindi non è necessario che db:seed task action venga passato. Altrimenti, devi preparare il database:

 rake db:test:prepare 

o

 RAILS_ENV=test rake db:seed 

Inoltre, per utilizzare l’attività di ricreazione è ansible aggiungere a Rakefile il seguente codice:

 namespace :db do task :recreate => [ :drop, :create, :migrate ] do if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/ Rake::Task[ 'db:seed' ].invoke end end end 

Quindi emettere:

 rake db:recreate 

Dalla riga di comando corri

 rake db:migrate:reset 

Usa come

 rake db:drop db:create db:migrate db:seed 

Tutto in una riga. Questo è più veloce poiché l’ambiente non viene ricaricato più e più volte.

db: drop – farà cadere il database.

db: create – creerà il database (host / db / password sarà preso da config / database.yml)

db: migrate – eseguirà migrazioni esistenti dalla directory (db / migration / .rb) *.

db: seed – eseguirà i dati di seed possibili dalla directory (db / migration / seed.rb) ..

Io di solito preferisco:

 rake db:reset 

fare tutto in una volta.

Saluti!

Puoi fare manualmente:

 rake db:drop rake db:create rake db:migrate 

O semplicemente rake db:reset , che eseguirà i passaggi precedenti ma eseguirà anche il file db/seeds.rb .

Una sfumatura aggiunta è che rake db:reset carichi direttamente dal file schema.rb anziché eseguire nuovamente tutti i file di migrazione.

I dati vengono spazzati via in tutti i casi.

È ansible utilizzare questa seguente riga di comando:

 rake db:drop db:create db:migrate db:seed db:test:clone 

Per eliminare un determinato database, puoi farlo sulla console di rails:

 $rails console Loading development environment 1.9.3 > ActiveRecord::Migration.drop_table(:) 1.9.3 > exit 

E quindi migrare di nuovo il DB

 $bundle exec rake db:migrate 

Su rails 4.2, per rimuovere tutti i dati ma preservare il database

 $ bin/rake db:purge && bin/rake db:schema:load 

https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md

È ansible utilizzare db:reset – per eseguire db: drop e db: setup o db:migrate:reset – che esegue db: drop, db: create e db: migrate.

dipendente da te vuoi usare exist schema.rb

Secondo la guida di Rails , questo liner dovrebbe essere usato perché verrebbe caricato dallo schema.rb invece di ricaricare i file di migrazione uno per uno:

 rake db:reset 

Perché in fase di sviluppo, si vorrà sempre ricreare il database, è ansible definire un’attività di rake nella cartella lib / tasks in questo modo.

  namespace :db do task :all => [:environment, :drop, :create, :migrate] do end end 

e nel terminale corri

 rake db:all 

ricostruirà il tuo database

Penso che il modo migliore per eseguire questo comando:

 **rake db:reset** it does db:drop, db:setup rake db:setup does db:create, db:schema:load, db:seed 

Semplicemente puoi correre

rake db:setup

Scollegherà il database, creerà un nuovo database e popolerà db da seed se hai creato il file seed con alcuni dati.

Oggi ho apportato alcune modifiche al mio schema delle rotaie. Mi sono reso conto che avevo bisogno di altri due modelli in una gerarchia e di altri da eliminare. C’erano molte piccole modifiche richieste ai modelli e ai controller.

Ho aggiunto i due nuovi modelli e li ho creati utilizzando:

 rake db:migrate 

Quindi ho modificato il file schema.rb. Ho rimosso manualmente i vecchi modelli che non erano più necessari, ho cambiato il campo della chiave esterna come richiesto e ho semplicemente riordinato un po ‘per renderlo più chiaro. Ho eliminato tutte le migrazioni e poi ho ripetuto la compilazione tramite:

 rake db:reset 

Ha funzionato perfettamente. Tutti i dati devono essere ricaricati, ovviamente. Rails ha realizzato che le migrazioni erano state eliminate e ripristinato il limite massimo:

 -- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])