2011-11-10 13 views
5

C'è un buon modo per unire rotaie db file di migrazione in 1 file per tavolo oltre suddividendo schema.rb manualmente?Unione di db/file di migrazione

La maggior parte del mio file di migrazione è stato creato durante lo sviluppo e non rappresenta reali cambiamenti di dati. Per ragioni storiche tali file saranno ancora accessibili sul sistema di controllo del codice sorgente. Mi sento a disagio nel mantenere quei file inutili.

risposta

-4

Non disturbare. I vecchi file di migrazione non stanno facendo alcun danno e potrebbero rendere più facile la manutenzione. Lasciali così come sono.

+0

Essi semplificano la manutenzione solo se le migrazioni rappresentano reali modifiche dei dati e non è così. – guiding5

+0

I file di migrazione dovrebbero rappresentare le modifiche * schema *, non le modifiche dei dati in quanto tali. Puoi pubblicare una migrazione di esempio di cui vorresti sbarazzarti? –

+0

Eliminazione di numerose colonne come non rilevanti, eliminazione di indici non necessari, ridenominazione di colonne e così via. – guiding5

13

Bene, posso immaginare che si desidera avere un inizio pulito. Mentre sei nella modalità di sviluppo del progetto per la tua prima versione, non vuoi tutti i file di migrazione separati. Anche se non possono ferire, ovviamente.

Fondamentalmente quello che puoi fare è questo.

PRIMO BACKUP lo schema e i dati.

Il file db/schema.rb contiene (o dovrebbe contenere) l'ultima versione del proprio schema. In caso contrario, eseguire:

rake db:schema:dump 

Ora è possibile pulire la cartella di migrazione.

Poi gestita:

rake db:drop 
rake db:schema:load 

L'ultimo comando corre il db/schema.rb e creare un nuovo schema. Questo dovrebbe portarti all'ultima versione del tuo database.

spettacolo db compito

rake -T db

+0

dice "Non so come creare lo schema 'compito: rilascia'". Sto usando Ruby 1.9.3 e rails 3.2.9 – gfreezy

+0

scusa è stato un refuso. l'ho corretto (rake db: drop) – Roger

0

È possibile utilizzare Squasher gemma per unire le migrazioni tutti i bambini in una sola.