2013-11-21 17 views
13

È ammissibile per eliminare (o archivio) i vecchi file di migrazione in un'applicazione Rails se lo schema è stabile?Eliminare i vecchi file di migrazioni in un'applicazione Rails

mie migrazioni sono numerose e ho il sospetto che ci può essere qualche problema da qualche parte, perché io di tanto in tanto dei problemi migrazione del database su Heroku.

+2

possibile duplicato [E 'una buona idea per eliminare i file di migrazione vecchie rotaie ?] (http://stackoverflow.com/questions/4248682/is-it-a-good-idea-to-purge-old-rails-migration-files) – brainimus

risposta

18

Non è necessario conservare i vecchi file di migrazione in un'app Rails, poiché lo schema del database deve essere acquisito in schema.rb o in un file SQL equivalente che può essere utilizzato per rigenerare lo schema.

migrazioni non sono la fonte autorevole per lo schema del database. Tale ruolo ricade su db/schema.rb o su un file SQL che Active Record genera esaminando il database. Non sono progettati per essere modificati, rappresentano solo lo stato corrente del database.

Non è necessario (ed è soggetto a errori) per distribuire una nuova istanza di un app per riprodurre l'intera storia di migrazione. È molto più semplice e veloce caricare semplicemente nel database una descrizione dello schema corrente, che si trova in schema.rb o nel file SQL.
Questo file deve essere versionato e mantenuto nel controllo del codice sorgente.

Per impostare la generazione schema.rb automatica, modificare config/application.rb con l'impostazione config.active_record.schema_format, che può essere: ruby ​​o: sql. Se: viene selezionato ruby, lo schema viene memorizzato in db/schema.rb. Se: sql è selezionato, lo schema viene scaricato nel formato SQL nativo di nel database.

+5

Questo è assolutamente corretto. Un avvertimento: le migrazioni possono essere utilizzate per influenzare il _content_ del database, piuttosto che la _struttura_. Ad esempio potresti avere un SQL che trasforma i dati (magari normalizzando, convertendo in maiuscolo o maiuscolo, ecc.). Un altro uso è un'attività di pulizia (cancella vecchi record, corregge un precedente errore logico nella creazione di dati, ecc.). Infine, le cose che dovrebbero essere fatte in 'seeds.db' a volte sono fatte nelle migrazioni. Se questo uso delle migrazioni è * corretto * è un'altra domanda, osservando che dovresti stare attento. –

+0

Cosa si dovrebbe fare con i vecchi file di migrazione? Non sembra giusto semplicemente cancellandoli. – wbeange

+1

Non sono d'accordo con @TomHarrisonJr solo per il fatto che queste cose dovrebbero "talvolta essere eseguite nelle migrazioni" - quei tipi di vincoli, trigger, stored procedure, ecc. SQL non devono essere considerati come file di migrazione. Invece, il 'config.active_record.schema_format' dovrebbe essere': sql', _OR_, sovrascrivere il task 'rake: db: setup' per eseguire comandi SQL successivi che definiscono questo tipo di cose (che record/schema.rb attivo non può). Sono d'accordo con tutto il resto ha detto :). – Todd

0

È possibile cancellare i tuoi vecchi migrazioni. Dopo aver fatto questo, quando si sta configurando la vostra applicazione è necessario eseguire:

rake db:schema:load 

Invece di:

rake db:migrate 
Problemi correlati