C'è un rake rapido db: comando di rollback per tutte le migrazioni?Rake db: migrate - come annullare tutte le migrazioni e ripristinarle
risposta
Mentre la risposta di @Orlandos è corretta, rake db:reset
non ripete tutte le migrazioni e, come dice, carica i dati dall'ultimo schema. Se si desidera annullare tutte le migrazioni e poi rifare loro, si dovrebbe usare:
rake db:migrate:reset #runs db:drop db:create db:migrate
È possibile visualizzare ulteriori informazioni in questo post: Difference between rake db:migrate db:reset and db:schema:load
basta usare rake db:reset
, che farà cadere il database (come annullare tutte le migrazioni) e reimpostato sull'ultimo schema.
UPDATE: un approccio più corretto utilizzerà rake db:migrate:reset
. Questo farà cadere il database, lo creerà nuovamente ed eseguirà tutte le migrazioni, invece di reimpostarsi allo schema più recente.
Se davvero si vuole rollback di tutte le migrazioni, e non solo prendere il database in uno stato incontaminato o per l'ultimo schema, è necessario eseguire:
rake db:migrate VERSION=0
Questo effettivamente rollback fino in fondo ogni migrazione e ensu che ogni migrazione è reversibile.
Se ora si esegue
rake db:migrate:status
vedrete che tutte le migrazioni sono ancora lì, ma sono in uno stato di 'down' (non applicato).
Altri comandi che implicano un rake db:reset
o rake db:drop
(come nelle risposte di @Orlando o @alex Falke) non farà alcun ripristino affatto: cioè, essi non assicurano che ogni migrazione è reversibile.
Inoltre, non è possibile eseguire rake db:drop
mentre altri utenti accedono al database, mentre i rollback possono essere eseguiti dal vivo (anche se in genere non è consigliabile). E, ultimo ma non meno importante, la semplice eliminazione e ricreazione del database eliminerà anche la tabella delle migrazioni dello schema: se qualcuno esegue rake db:migrate:status
dopo che il database è stato eliminato, verrà risposto con "La tabella delle migrazioni dello schema non esiste ancora" e non avrà alcun indizio su quali migrazioni possono essere applicate (a meno che non lo sappiano ancora o possano elencarle).
Questa è la risposta giusta reale –
Questa risposta deve essere selezionata per evitare confusione. –
'rake db: migrate: reset' in realtà non esegue il rollback di nessuna migrazione, questo è quello che la domanda sta veramente chiedendo. –