2012-02-10 21 views
5

Sto aggiornando un'applicazione Rails 1.2.3 alla 3.2.1.Come aggiornare le migrazioni durante l'aggiornamento da un'app Rails 1.2.3?

Sto cercando di capire come posso aggiornare la struttura di migrazione per essere compatibile con l'ultima versione di Rails, in modo che, idealmente, è possibile eseguire solo rake db:migrate quando si imposta l'app. Attualmente, ho risolto questo problema semplicemente facendo rake db:migrate:up VERSION=[version_number] di qualsiasi migrazione ho bisogno di eseguire. Se eseguo semplicemente rake db:migrate, tenta di rieseguire tutte le migrazioni dall'inizio e si arresta (poiché tali migrazioni sono già state eseguite nel db dump che ho).

Le migrazioni nell'app sono simili a 001_add_some_model.rb, 002_add_some_other_model.rb anziché 20120209182512_add_some_model.rb.

Qualcuno ha qualche esperienza con questo? Come posso risolvere questo?

+6

Wow da 1.2.3 a 3.2.1. Buona fortuna ... – lucapette

+0

@lucapette Grazie! È praticamente finito, voglio solo rendere più naturali le migrazioni in esecuzione. – jfedick

+0

la soluzione che ho visto abbastanza spesso è "eliminare la migrazione e crearne una nuova come punto di partenza" – lucapette

risposta

7

Penso che dovresti riavviare le tue migrazioni, eliminare tutta la migrazione che hai e creare una nuova migrazione con le definizioni dei tuoi modelli attuali. Vedere this migration come esempio iniziale.

2

Non è consigliabile eseguire tutte le migrazioni per configurare un nuovo database anche in un'app Rails 3 aggiornata. Questo è spiegato in db/schema.rb:

Si noti che questa definizione schema.rb è la fonte autorevole per lo schema del database . Se è necessario creare il database dell'applicazione su un altro sistema , si dovrebbe utilizzare db: schema: caricare, non eseguire tutte le migrazioni da zero. Quest'ultimo è un approccio imperfetto e insostenibile (maggiore è la migrazione di , più lento sarà il suo avvio e maggiore probabilità di problemi).

0

Invece di ciò che era stato suggerito, avrei creato nuove migrazioni da zero. Avvia tutti i tuoi modelli allo stato attuale e crea nuove migrazioni per ciascuno di essi, in questo modo puoi ancora utilizzare la potenza delle migrazioni in un secondo momento, come aggiungere una colonna a una tabella o modificare un tipo di colonna.

Se si crea una migrazione singola per tutti i modelli, like has been suggested si perde la traccia del modello nel nome delle migrazioni.

Questo è solo un altro modo per farlo e riflette la mia visione.

Problemi correlati