2013-10-16 16 views
7

Ho diverse filiali su git, lo schema tra questi rami è su versioni diverse. Dopo il passaggio a un ramo, diciamo new_feature (con migrazione in sospeso) se faccio rake db:setup quindi mi consiglia di eseguire la migrazione in attesa.rake db: migrazione aggiornamento schema.rb con tabelle eliminate

Una volta eseguita la procedura, lo schema viene aggiornato con le tabelle eliminate nello stesso ramo.

Se faccio rake db:reset allora funziona correttamente.

Conosco la differenza tra db:setup e db:reset. L'uno più tardi fa db:drop e poi db:setup

Ma mi chiedo il motivo per cui lo schema si presenta quelli caduto tavoli su rake db:migrate

sono sicuro che mi manca un po 'di conoscenza rotaie w.r.t. caricamento dello schema e processo di migrazione

Qualsiasi approfondimento sarebbe di grande aiuto. Grazie in anticipo

risposta

5

Sembra che lo schema.rb sia archiviato in git, che è una buona cosa. Quindi, quando cambi succursali, lo schema.rb è diverso dal tuo schema db attuale.

rake db: migrate controllerà solo la versione dello schema nello schema.rb e se la versione del database è minore eseguirà quindi tutte le migrazioni "in sospeso". Rigenera solo il file schema.rb se viene eseguita una migrazione.

Nel caso in cui lo schema attuale sia in una versione superiore rispetto alla versione riportata nello schema.rb, fa l'unica cosa sicura, che non è nulla. La logica è che potrebbe non esserci un file di migrazione per aggiornarlo, oppure le operazioni del database possono forzare a ricreare la tabella/troncare o qualcosa di altrettanto sgradevole. Ci sono altri casi limite di versioni non corrispondenti, ma penso che tu abbia l'idea.

Quindi avete alcune opzioni per lavorare nella mentalità della migrazione, se volete mantenere i dati tra i rami.

A) Tutti i dati necessari tra i rami rimangono nel file db seeds. Quindi è possibile rilasciare/creare il db senza problemi

B) Prima di passare i rami, eseguire il rollback delle migrazioni che sono diverse. Nel nuovo ramo farli rotolare di nuovo in avanti.

C) Cheat ed elimina lo schema.rb ed esegue nuovamente rake db: migrate. Questo è ingannevole perché, potrebbe facilmente causare dataloss, schema.rb incoerente nel controllo della versione e un mal di testa per gli altri membri del team perché le migrazioni non hanno alcun senso.

E un consiglio. Se l'hai commesso su git, non modificare un vecchio file di migrazione. creane uno nuovo. Formano uno stack logico e hanno lo scopo di modificare sequenzialmente lo schema.

Problemi correlati