2013-04-24 3 views

risposta

111

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

+8

Questa è la risposta giusta reale –

+3

Questa risposta deve essere selezionata per evitare confusione. –

+0

'rake db: migrate: reset' in realtà non esegue il rollback di nessuna migrazione, questo è quello che la domanda sta veramente chiedendo. –

14

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.

+8

Questo non è ciò che la domanda vuole fare. Se si modifica qualcosa nelle migrazioni, non aggiornerà le modifiche nello schema. –

+0

@Alex Falke ha la risposta corretta a questa domanda. – Qasim

+0

@Questa risposta aggiornata :) – Orlando

16

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).