2011-06-29 13 views
19

Więc sugeruję w mojej pracy, jest wprowadzenie db/schema.rb do pliku .gitignore, więc nie mamy (od czasu do czasu) łączenie problemów.Czy warto umieścić plik db/schema.rb na liście .gitignore ??

Są pewne obawy, że jeśli wydarzy się coś strasznego (spadnie meteoryt z nieba bezpośrednio na serwerze DB i jednocześnie wszystkie pliki db/migrete są uszkodzone) możemy stracić schemat, a my będziemy musieli użyć rake db: purge (aby ponownie użyć schema.rb). Zgadzam się, że jest to możliwe i jest to dobry argument, ale nie powinno to stanowić problemu, ponieważ db/schema.rb jest generowany za każdym razem, gdy robimy rake db: migrate. Więc nawet jeśli nie będziemy przesyłać schema.rb na serwer, przepychamy migracje, dodając uruchomione db: migruj za każdym razem, gdy wdrażamy zmiany DB, a za pomocą tego db: migrate rails automatycznie wygeneruje schema.rb po stronie serwera, a schema.rb znajduje się na serwerze niezmienionym, dopóki nie wykonamy kolejnego pliku db: migracja.

jaka jest Twoja opinia, czy powinniśmy, czy nie powinniśmy umieścić db/schema.rb w git ignorować?

dziękuję

+1

możliwy duplikat [Jakie jest właściwe podejście do radzenia sobie z plikiem Rails db/schema.rb w GIT?] (Http: // stackoverflow.com/questions/6450263/what-is-the-right-approach-to-deal-with-rails-db-schema-rb-file-in-git) –

+0

Skarbie, byłem bardzo dumny z mojej odpowiedzi :) – VonC

+0

Przepraszam ale link jest zbyt przekonujący :(, ale dziękuję za pomoc – equivalent8

Odpowiedz

30

Zawsze proponuję zachować schema.rb w wersji contol, ponieważ zadania takie jak rake db: schema: load zależą od tego, czy jest tam.

O konfliktach, czy mówisz o konfliktach wersji schematu? Można je łatwo złagodzić za pomocą przedstawionego tutaj algorytmu scalania: http://tbaggery.com/2010/10/24/reduce-your-rails-schema-conflicts.html

Inne konflikty, takie jak lokalizacja przełączania definicji kolumn, można łatwo uniknąć, zachowując ostrożność przy zapisywaniu w repozytorium.

+1

+1 dla linku, fajny pomysł – MBO

+0

Tak, mówię o konfliktach GIT (link), link zamieszczony jest naprawdę fajnym pomysłem, pomyślę o tym (+1) – equivalent8

4

Należy umieścić w VCS cokolwiek trzeba odtworzyć środowisku operacyjnym.
Jeśli do przebudowy aplikacji potrzebujesz prawa schema.rb (w odpowiedniej wersji), to tak, może być wersjonowana.

Ale jeśli uda się go odzyskać przez inny proces, to lepiej go zarchiwizować poprzez inne referencje niż VCS.

+0

ok, argument został podjęty na korzyść nie umieszczania go na .gitignore :) – equivalent8

+1

@ równorzędny: tak, dlatego przegłosowałem [odpowiedź Martijna] (http: //stackoverflow.com/questions/6520017/is-a-good-idea- to-put-db-schema-rb-to-gitignore-list/6520115#6520115), który obejmuje rzeczywisty przypadek, w którym 'schema.rb' jest potrzebne. – VonC

+1

plik schema.rb zawiera następujący tekst: "Zaleca się sprawdzenie tego pliku w systemie kontroli wersji." – hlegius

4

Podczas przełączania między fabularnych oddziałów, które rozwijają inny zestaw atrybutów model, a następnie bez schema.rb czasem musiałaby:

  1. rake db:migrate:down VERSION=xxx migracji, które miały tworzyć jakiś czas temu, ale nie połączyła się z innymi oddziałami
  2. git checkout branch
  3. rake db:migrate migracji wszystkich nowo utworzonych oddziałów

wpadam som E problemy z tym w poprzednich projektach, gdzie schema.rb był w .gitignore. Za każdym razem, gdy widzę, że coś jest nie tak, musiałem usunąć bazę danych i odtworzyć z migracji, podczas gdy ze schema.rb mógłbym po prostu załadować schemat w ułamku sekundy, a następnie rake db:seed załadować dane. Ale to nie było krytyczne.

Jestem także ciekawy jakie masz problemy z łączeniem schema.rb? W większości przypadków możesz przesłonić ten plik bez martwienia się o zmiany (zakładam, że nie zmodyfikowałeś ręcznie struktury bazy danych) z rake db:dump i po prostu dodaj to jako rozwiązanie scalające.