esattamente cosa fa rake db: migrate?
-
06-07-2019 - |
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).
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.