11

C'è un problema frustrante in cui le mie migrazioni dei binari aggiornano lo schema con spazi bianchi e la posizione delle colonne della tabella.La migrazione delle rotaie sta sempre inserendo spazi bianchi o modificando l'ordine delle colonne nello schema

Quindi la maggior parte delle volte quando eseguo bundle exec rake db:migrate verrà eseguito uno degli scenari seguenti. Quando unisco questo nel nostro ramo principale e altri sviluppatori lo risolvono, la migrazione delle loro rotaie ripristina le schede e l'ordine delle posizioni.

Abbiamo notato che tutti e tre gli sviluppatori del team hanno lo stesso problema durante l'esecuzione di una migrazione se sono stato l'ultimo responsabile dello schema.

Ho appena aggiornato postgres to v9.2.4 che è lo stesso degli altri sviluppatori. Qualche idea su cos'altro potrei provare?

Esempi

Qui di seguito sono diff git per dimostrare ciò che sta accadendo.

Esempio di ri-ordinare lo schema:

create_table "accounts", :force => true do |t| 
    t.integer "organisation_id" 
- t.boolean "active",    :default => false 
    t.text  "notes" 
+ t.boolean "active",    :default => false 
    end 

Esempio di aggiunta schede per lo schema:

create_table "comments", :force => true do |t| 
- t.integer "commentable_id", :default => 0 
- t.string "commentable_type", :default => "" 
+ t.integer "commentable_id",  :default => 0 
+ t.string "commentable_type", :default => "" 
- t.datetime "created_at",      :null => false 
- t.datetime "updated_at",      :null => false 
+ t.datetime "created_at",       :null => false 
+ t.datetime "updated_at",       :null => false 
+0

Cosa ti fa pensare che gli spazi bianchi siano schede? Qualche possibilità di vedere l'intera versione precedente e successiva di uno di questi 'create_table's? –

+0

@muistooshort Grazie, potrebbero essere gli spazi bianchi – Coderama

+1

Il primo indica semplicemente che non tutte le colonne sono nello stesso ordine all'interno del database, confrontare l'output '\ d accounts' in' psql' e troverai il colpevole; questo può accadere in vari modi e non dovrebbe essere un problema. La seconda è probabilmente solo una cosa di allineamento (cioè rendere tutte le opzioni di ': default => ...' allineate) ma è difficile dirlo senza vedere il tutto prima e dopo i file 'schema.rb'. –

risposta

-12

Basta dovrebbe ignorare schema.rb dal controllo di versione. Cambia in modo diverso a seconda dell'ordine delle migrazioni e chi li ha generati. Hai solo bisogno delle migrazioni per generare lo schema appropriato per ogni sviluppatore coinvolto nel progetto.

Saluti.

+3

* Correzione *: Devi solo ** MAI ** ignorare schema.rb dal controllo della versione. http://stackoverflow.com/questions/6520017/is-it-a-good-idea-to-put-db-schema-rb-to-gitignore-list – Dorian

0

Ho il sospetto che questo errore sia causato dalla diversa configurazione degli spazi bianchi ('tab width' se si utilizza sublime).

2

Ho costruito una gemma per risolvere questo problema.

Ordina le colonne, i nomi indice e le chiavi esterne, rimuove gli spazi bianchi in eccesso ed esegue Rubocop per alcune formattazioni per unificare l'output del file schema.rb.

https://github.com/jakeonrails/fix-db-schema-conflicts

Dopo aver aggiunto al vostro Gemfile basta eseguire rake db: la migrazione o rake db: schema: discarica come normale.

+1

Grazie! Questo dovrebbe essere nel nucleo di Rails – mahemoff

+0

Cheers, felice che abbia aiutato qualcuno là fuori! – jakeonrails

+2

@jakeonrails Ho trovato tutto questo per caso. Sospetto che aggiungere la parola 'sort' al nome della tua gemma avrebbe maggiore attenzione. Ottimo lavoro, grazie! – user3763682

Problemi correlati