Ripristino database da backup e impossibilita' ad utilizzare le migrations


#1

Ho fatto un ripristino di un database da un file di backup.
Tale ripristino mi ha ovviamente creato tutte le tabelle all’interno
del database con i dati associati.
A questo punto pero’ mi e’ impossibile utilizzare le migrations.
Ho aggiunto una nuova migration perche’ ho la necessita’ di aggiungere
una tabella al database.
Lancio db:migrate ma mi dice che alcune relazioni esistono gia’, sono
le migration relative alle precedenti tabelle, e quindi il rake non va
a buon fine.
C’e’ una soluzione a cio’?


#2

2009/4/28 Mauro removed_email_address@domain.invalid:

Lancio db:migrate ma mi dice che alcune relazioni esistono gia’, sono
le migration relative alle precedenti tabelle, e quindi il rake non va
a buon fine.

questo non mi torna, come hai fatto il backup? usavi le migrations
anche prima di fare il backup/ripristino (i.e. le hai usate anche per
migrare l database alla versione dello schema di cui hai il backup)?

se hai salvato tutte le tabelle dovreste averti salvato anche la
tabella schema_migrations (se rails >= 2.1, altrimenti la tabella
schema_info) che contiene i dati necessari alle migration per sapere
quelle gia eseguite e quelle ancora da eseguire.

Luca


#3

2009/4/28 Luca M. removed_email_address@domain.invalid:

tabella schema_migrations (se rails >= 2.1, altrimenti la tabella
schema_info) che contiene i dati necessari alle migration per sapere
quelle gia eseguite e quelle ancora da eseguire.

Quello che ho fatto e’ stato: creazione del database di development
con relative migrations, tutto ok.
Creazione del database in ambiente di produzione e relative
migrations, tutto ok.
Backup del database di produzione.
Drop del database di development, creazione a mano del database vuoto
e ripristino da backup del database di produzione.


#4

Msan M. wrote:

2009/4/28 Luca M. removed_email_address@domain.invalid:

tabella schema_migrations (se rails >= 2.1, altrimenti la tabella
schema_info) che contiene i dati necessari alle migration per sapere
quelle gia eseguite e quelle ancora da eseguire.

Quello che ho fatto e’ stato: creazione del database di development
con relative migrations, tutto ok.
Creazione del database in a mbiente di produzione e relative
migrations, tutto ok.
Backup del database di produzione.
Drop del database di development, creazione a mano del database vuoto
e ripristino da backup del database di produzione.

Apparentemente rake db:migrations sta eseguendo delle migrazioni che non
dovrebbe fare. Rails usa una tabella per tenere traccia di dove è
arrivato con le migrazioni e l’errore che hai pare indicare che i valori
di quella tabella non sono corretti.

Come scriveva Luca: se hai Rails < 2.1 controlla che in schema_info ci
sia un record (uno solo) con il numero dell’ultima migrazione (quella
precedente la migrazione che ora vuoi eseguire). Se hai Rails >= 2.1
devi invece controllare che in schema_migrations ci sia un record per
ogni migrazione (100 migrazioni = 100 record, è diverso da quel che fa
schema_info).

E’ anche possibile che il db fosse stato fatto con Rails < 2.1 ed ora tu
lo stia facendo andare con Rails >= 2.1? Se così fosse hai i valori
corretti in schema_info ma Rails ora guarda schema_migrations e prova a
ricrearti il db da zero partendo dalla prima migrazione.

Se invece la versione di Rails ed i contenuti delle tabelle schema_*
sono ok, allora sì che abbiamo un bel puzzle…

Paolo


#5

2009/4/30 Paolo M. removed_email_address@domain.invalid:

Backup del database di produzione.
devi invece controllare che in schema_migrations ci sia un record per
ogni migrazione (100 migrazioni = 100 record, è diverso da quel che fa
schema_info).

E’ anche possibile che il db fosse stato fatto con Rails < 2.1 ed ora tu
lo stia facendo andare con Rails >= 2.1? Se così fosse hai i valori
corretti in schema_info ma Rails ora guarda schema_migrations e prova a
ricrearti il db da zero partendo dalla prima migrazione.

Se invece la versione di Rails ed i contenuti delle tabelle schema_*
sono ok, allora sì che abbiamo un bel puzzle…

Uso Rails 2.3.
La tabella schema_migrations contiene:

“20090129170823”
“20090129170853”
“20090129171049”
“20090129171952”

le migrations sono:

20090407193416_create_sectors.rb
20090407193536_create_categories.rb
20090407193930_create_suppliers.rb
20090407194832_create_categories_suppliers.rb

Successivamente ho aggiunto:

20090428080613_create_users.rb

L’errore e’ che tenta di ricreare le tabelle precedenti ma esistendo
gia’ da errore.
Ho risolto cancellando le prime 4 migrations dal progetto anche se non
penso sia il modo corretto di operare.


#6

2009/4/30 Mauro removed_email_address@domain.invalid:

20090407193416_create_sectors.rb
20090407193536_create_categories.rb
20090407193930_create_suppliers.rb
20090407194832_create_categories_suppliers.rb

se avessi usato queste migrations per creare il database avresti
dovuto avere questo nella tabella schema_migrations:

“20090407193416”
“20090407193536”
“20090407193930”
“20090407194832”

hai per caso cancellato e ricreato le migrations? Dalle date pare che
quelle originali risalissero al 29 gennaio mentre quelle attuali sono
del 7 aprile…

Luca


#7

2009/4/30 Mauro removed_email_address@domain.invalid:

le migrations sono:
“20090407193536”

Ho risolto rinominando le migrations che mi davano problemi mettendo
nei nomi files le stesse date indicate nella tabella
schema_migrations.


#8

2009/4/30 Luca M. removed_email_address@domain.invalid:

“20090407193930”
“20090407194832”

hai per caso cancellato e ricreato le migrations? Dalle date pare che
quelle originali risalissero al 29 gennaio mentre quelle attuali sono
del 7 aprile…

Probabile, non mi ricordo.
L’unica soluzione, nel caso volessi aggiungere o modificare delle
tabelle sarebbe quella di cancellare le vecchie migrations?