2012-04-12 13 views
7

Ho creato molte migrazioni dall'inizio della mia app di rotaie. Alcuni di loro solo per scopi di test. Ora ho un sacco di migrazioni che sono totalmente inutili (ad esempio: creare una tabella in una migrazione e rilasciarla nel prossimo).Rimuovere la migrazione passata nei binari

Come schema.rb viene aggiornato una volta db: migrate viene eseguito, è possibile eliminare tutte le migrazioni e iniziare dal contenuto effettivo di schema.rb?

+1

potresti usare 'rake db: schema: load' –

+0

ed eliminare tutti i file di migrazione? – Luc

risposta

8

Sì, è possibile (e probabilmente dovrebbe) rimuovere le migrazioni precedenti. Arriverà un punto in cui le vecchie migrazioni potrebbero non funzionare più poiché il codice del modello dipenderà dalle versioni successive dello schema.

Quindi con tutti i mezzi eliminare le migrazioni (li avete sotto il controllo del codice sorgente, giusto?), E utilizzare

rake db:schema:load 

per inizializzare un nuovo database se è necessario.

UPDATE: La guida Rails ha ora qualcosa di simile da dire su questo: http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you

+0

Usa 'rake db: schema: load' invece di' rake db: migrate'? – methyl

+0

No. 'rake db: schema: load' scarica il database corrente e lo ricrea da' schema.rb'. 'rake db: migrate' applica eventuali migrazioni in sospeso al database esistente. – Thilo

+0

Perché è così importante averli nel controllo del codice sorgente se ho l'ultima versione di schema.rb? Non dovrebbe essere quello il ragazzo importante? – Luc

0

un modo migliore per farlo è quello di fare quanto segue ...

Una volta raggiunto una pietra miliare nel progetto, e sei certo di non voler migrare sotto quella versione del DB, puoi sostituire il tuo numero elevato di file di migrazione con un singolo file di migrazione, che puoi usare come nuova migrazione "iniziale" che si impacchetta tutto ciò che è stato fatto fino a quella data.

Dopodiché: continua a utilizzare le migrazioni nel tuo progetto!

Non modificare mai il file schema.rb a mano .. e non caricare mai il file db/schema.rb a meno che non si tratti di qualcosa come il ripristino di emergenza.

Non hai il 100% di garanzia che il file che viene archiviato per il controllo della versione sia la versione più recente o addirittura la versione corretta.

È molto più sicuro eseguire la migrazione verso l'alto e verso il basso e solo raggruppare una grande quantità di migrazioni in un singolo file di migrazione.

Caricando manualmente il file schema.rb, si elude completamente la rete di sicurezza fornita dalle migrazioni. Questa non è una buona idea.