11

Występuje frustrujący problem, w którym moje migracje railsowe aktualizują schemat z białymi znakami i pozycją kolumn tabeli.Migracja Railsy zawsze wstawia białe znaki lub zmienia kolejność kolumn w schemacie.

Tak więc najczęściej, gdy uruchamiam bundle exec rake db:migrate, zrobi on jeden z poniższych scenariuszy. Kiedy scalę to z naszą główną gałęzią, a inni programiści to odtworzą, wtedy ich migracja railsów odwróci tabulatory i uporządkowanie pozycji.

Zauważyliśmy, że wszyscy trzej programiści w zespole mają taki sam problem podczas migracji, jeśli byłem ostatnim uczestnikiem schematu.

Właśnie zaktualizowałem postgres to v9.2.4, który jest taki sam jak innych programistów. Jakieś pomysły na to, co jeszcze mógłbym spróbować?

Przykłady

Poniżej diffs git aby wykazać, co się dzieje.

Przykład ponownego zamawiania schematu:

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 

Przykład dodawania zakładek do schematu:

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

Co powoduje, że białe znaki są tabulatory? Czy jest szansa zobaczenia całości przed i po wersjach jednej z tych opcji 'create_table's? –

+0

@muistooshort Dzięki, mogą to być białe znaki – Coderama

+1

Pierwsza z nich oznacza po prostu, że nie wszystkie kolumny znajdują się w tej samej kolejności wewnątrz bazy danych, należy porównać dane wyjściowe '\ d accounts' w' psql', a znajdziesz winnego; może się to zdarzyć na różne sposoby i nie powinno stanowić problemu. Drugi prawdopodobnie jest po prostu spozycjonowaniem (tzn. Ustawia wszystkie opcje ': default => ...'), ale trudno jest stwierdzić, czy nie widzimy całej przed i po plikach 'schema.rb'. –

Odpowiedz

-12

Po prostu powinniśmy ignorować schema.rb z kontrolą wersji. Różnie się zmienia w zależności od kolejności migracji i kto je wygenerował. Migrację potrzebujesz tylko do wygenerowania odpowiedniego schematu dla każdego programisty zaangażowanego w projekt.

Pozdrawiam.

+3

* Poprawka *: Po prostu powinieneś ** NIGDY ** nie ignoruj ​​schema.rb ze swojej kontroli wersji. http://stackoverflow.com/questions/6520017/is-it-a-good-idea- to-put-db-schema-rb-to-gitignore-list – Dorian

0

Podejrzewam, że ten błąd jest spowodowany przez różną konfigurację białych spacji ("szerokość zakładki", jeśli używasz sublime).

2

Zbudowałem klejnot, aby rozwiązać ten problem.

Sortuje kolumny, nazwy indeksu i klucze obce, usuwa nadmiarowe odstępy i uruchamia program Rubocop w celu formatowania w celu ujednolicenia danych wyjściowych pliku schema.rb.

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

Po dodaniu go do Gemfile po prostu uruchomić rake db: migrować lub rake db: schema: zrzucić jak normalne.

+1

Dziękuję! Powinno to być w rdzeniu Rails – mahemoff

+0

Pozdrawiam, cieszę się, że pomógł komuś tam! – jakeonrails

+2

@jakeonrails Znalazłem to całkowicie przez przypadek. Podejrzewam, że dodanie słowa "sort" do ciebie nazwa klejnotu zwróciłoby na to dodatkową uwagę. Świetna robota, dzięki! – user3763682