Domanda

Rake db: migrate aggiunge solo nuove migrazioni o elimina tutte le migrazioni / modifiche e crea tutto nuovo?

Penso che il rake stia generando un errore perché sta tentando di accedere a un attributo della tabella nella migrazione 040 che è stato eliminato nella migrazione 042. in qualche modo il mio DB e il rake non sono sincronizzati e voglio risolverli.

per voi esperti là fuori - è normale che il rake non sia sincronizzato con le migrazioni? come posso evitarlo (no, non modifico manualmente il mio schema o file rake).

È stato utile?

Soluzione

Ogni volta che crei una migrazione usando gli script (come script / genera modello ...) una nuova migrazione viene aggiunta alla directory corretta pronta per essere sincronizzata con il database reale.

Effettivamente rake db: migrare controlla solo quali migrazioni mancanti devono ancora essere applicate al database senza preoccuparsi di quelle precedenti.

Ovviamente se si modifica il database usando altri modi è comune ottenere cose non sincronizzate perché, come hai detto, puoi ritrovarti ad applicare una migrazione a qualcosa che è cambiato sotto.

Altri suggerimenti

Quando si utilizzano le migrazioni delle rotaie, viene automaticamente creata una tabella denominata schemi_migrations , che tiene traccia di quali migrazioni sono state applicate, memorizzando il numero di versione di ciascuna migrazione (questo è il numero che precede il nome della migrazione nel nome del file, ovvero db / migrate / _20090617111204__migration.rb). Quando esegui rake db: migrate per eseguire la migrazione, verranno eseguite solo le migrazioni che non sono state eseguite in precedenza (ovvero la loro versione non è contenuta nella tabella) (per questo motivo, cambiando una migrazione che è già eseguito non avrà alcun effetto quando si esegue db: migrate ). Durante la migrazione verso il basso, tutte le versioni trovate in schemi_migrations che sono maggiori della versione a cui stai eseguendo il rollback verranno annullate.

Una migrazione significa che si passa dalla versione corrente a una versione più recente (come si dice nella prima risposta). Usando rake db: migrate puoi applicare qualsiasi nuova modifica al tuo schema. Ma se si desidera eseguire il rollback a una migrazione precedente, è possibile utilizzare rake db: rollback per annullare le nuove modifiche se vengono definite in modo errato. Attenzione: così facendo i tuoi dati andranno persi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top