Mi sono imbattuto in un problema in cui stavo lavorando su due rami su un progetto di rotaie e ogni progetto ha una migrazione per aggiungere una colonna. Al momento, rake db:migrate:reset
causa un problema e mi sono basato esclusivamente sul mio schema.rb
per rappresentare correttamente lo stato del mio database. A un certo punto, mi sono imbattuto in un problema in cui una colonna aggiunta dal ramo A è entrata nello schema del ramo B. Poiché migrate:reset
non era un'opzione, ho fatto ricorso alla modifica manuale del file dello schema. Ho commesso questa modifica che in pratica eliminava la colonna dal ramo A di cui non avevo bisogno nello schema.rb del ramo B.È considerato sicuro modificare manualmente schema.rb in rotaie
Il problema è arrivato dopo aver unito il ramo A al master. Quando ho provato a rebase il ramo B per master, ho ancora avuto commit in B per eliminare la colonna (che ora è diventata rilevante perché è in master) nel file dello schema. Git non ha visto un conflitto per questo e lo ha integrato automaticamente. Alla fine della mia rebase, ho scoperto che il mio schema è incoerente con quello che ho nel master.
La mia correzione è di modificare nuovamente il file dello schema e di aggiungere manualmente la colonna eliminata in precedenza al file dello schema. La mia domanda è: è considerato non convenzionale? pericoloso? hacky?
In questo momento si tratta di una colonna, ma se questo comportava più eliminazioni/aggiunte di colonne, la soluzione (pericolosa?) Poteva portare a più problemi e incoerenza db/schema.rb.
Concordato. Potresti potenzialmente svuotare l'utilità di "rake db: migrate version = xxx" e creare futuri mal di testa uscendo dalla prenotazione e modificando manualmente schema.rb. – railsdog