2009-07-28 6 views
14

Ho un database configurato per l'installazione di Rails e alcune migrazioni configurate. Mi piacerebbe essere in grado di ripristinare il mio database indietro per non avere tabelle/vincoli/ecc., Ma non riesco a trovare un modo ragionevole per farlo senza conoscere il numero di migrazioni o il timestamp della prima migrazione. Qui sono le mie opzioni come li vedo:Come posso migrare il mio database con i binari alla prima revisione senza prima eliminare il database?

  • rake db:migrate:reset
  • rake db:migrate:down VERSION=20090701154839 dove 20.090.701,154839 millions è il timestamp associato alla prima migrazione
  • rake db:rollback STEP=15 dove ci sono state 15 le migrazioni

Il problema con db:migrate:reset è che cade prima il database (lo fa db:drop, db:create, quindi db:migrate).

Il problema con db:migrate:down è che non voglio codificare la VERSIONE dell'inizio.

Il problema con db:rollback è che non conosco il numero di passaggi che è tornato all'inizio.

Quali sono le mie opzioni?

risposta

25
rake db:migrate VERSION=0 

Funziona anche se si utilizzano i file di migrazione con data e ora più recenti.

Aggiornamento: l'ho appena provato su Rails 3.2.1 e funziona ancora. Esegue la parte "inattiva" di tutte le migrazioni note a schema_migrations. Non ho idea se ha funzionato su 3.1 o meno, ma il commento qui sotto indica che questa funzione è stata interrotta durante quel periodo.

+0

Grazie; questo è quello che stavo cercando. Avevo provato rake: db: migrate: down VERSION = 0, ma down cerca versioni particolari, mentre db: migrate no. –

+0

Non funziona con i binari 3.1.0 rc 4: 'Nessuna migrazione con il numero di versione 0' –

+0

@ Marc-AndréLafortune Ho avuto lo stesso problema. Assicurati di fare 'rake db: migrate VERSION = 0 '(stavo facendo db: migrate: down VERSION = 0) – Qasim

0

È moderatamente hackish, ma è possibile eseguire una query per trovare la prima VERSIONE in schema_migrations e quindi chiamare rake db: migrate: down per ottenere quella VERSION (presumo che si desideri impacchettare uno script "reset" per la tua app).

Ciò richiederà, ovviamente, che i metodi down su tutte le migrazioni funzionino correttamente.

3

In aggiunta alla soluzione (corretta) di jdl sopra, un altro modo per ottenere questo risultato è rake db:rollback STEP=1000000, dove 1000000 è un numero elevato, maggiore del numero di migrazioni che si avranno. Arretra per quanto può fino a 1000000 volte, o comunque molte volte come STEP.