2009-10-13 10 views
18

Istnieje development_structure.sql w folderze my/db aplikacji Rails (rails 2.3.4, ruby ​​1.8.7) i nie jestem pewien, co dokładnie robi.Co to jest db/development_structure.sql w projekcie rails?

  1. Czy jest to potrzebne dla określonego środowiska? (Myślę, że czytałem gdzieś, że jest używany do testów)
  2. Czy muszę dodać to do mojego repozytorium git?
+1

jest to to samo co struktura.sql w szynach 3? Jeśli tak, to pytanie powinno zostać zredagowane: –

+0

@boulder_ruby tak –

Odpowiedz

20

Nie należy dodawać go do repozytorium git.

Jest to plik tworzony automatycznie przez szyny po uruchomieniu migracji z bazą danych.yml skonfigurowanym do łączenia się z bazą danych mysql. Można go zobaczyć jako alternatywa do schema.rb

Wierzę, że można zmusić szyny, aby go utworzyć, dodając w environment.rb:

config.active_record.schema_format = :sql 

Gdy występuje ten plik jest wykorzystywany na przykład poprzez:

rake db:test:clone_structure 

Edit

odpowiedniej sekcji w Ruby on Rails Guides. http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

Zaleca się, aby sprawdzić to w kontrolce źródła na wiki.

Osobiście lubię go z tego wykluczać. Lubię bardzo szybko przeprowadzić wszystkie migracje. To dla mnie dobry znak. Jeśli migracje stają się powolne, mam wrażenie, że nie mam całkowitej kontroli nad moim środowiskiem. Powolne migracje oznaczają ogólnie, że mam dużo danych w mojej bazie danych programowania, co jest dla mnie błędne.

Jednak obecnie wydaje się, że jest to kwestia osobistego gustu. Śledź swoje instynkty.

+17

... z wyjątkiem tego, że powinieneś * dodać je do swojego repozytorium, tak jak powinieneś dodać schema.rb do swojego repozytorium. Celem posiadania pliku w repozytorium jest to, że nie musisz uruchamiać wszystkich migracji podczas konfigurowania nowego DB. –

+1

@ MarnenLaibow-Koser Mam go w repozytorium i zawsze zmienia wartość auto_increment identyfikatorów, co jest dość denerwujące. – ecoologic

+1

@ecoologic Tak, to może być trochę denerwujące. Jest to jeden z powodów, dla których powinieneś użyć schema.rb zamiast struct.sql jeśli to w ogóle możliwe. Ale absolutnie powinno być w repozytorium. –

1

Jest tworzony po uruchomieniu zadania rake, aby sklonować bazę danych programowania do testowej bazy danych. Baza danych programistycznych jest wyprowadzana do SQL, która jest następnie odczytywana do testowej bazy danych. Możesz bezpiecznie usunąć.

29

Ten post został wykorzystany jako punkt odniesienia przez mojego współpracownika, ale dwie odpowiedzi nie są wystarczająco dokładne lub wyczerpujące.

development_structure.sql to zrzut na niskim poziomie schematu, który jest niezbędny, gdy zaczynasz korzystać z zastrzeżonych funkcji bazy danych - albo chcesz, albo nie, wykorzystasz je w pewnym momencie.

Odnośnie do przechowywania, czy nie, trwa debata. Oto informacyjny post: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/. I moje podejście do tego wynika.

Celem modułu development_structure.sql jest zsynchronizowanie, dla dowolnego danego zatwierdzenia, struktury bazy danych z kodem, bez wcześniejszej znajomości struktury schematu, czyli bez konieczności polegania na istniejącym stanie schemat, aby uzyskać nowy.

W skrócie, udostępniając strukturę schematu, za każdym razem, gdy zmieniasz gałąź/zatwierdzenie, ładujesz ją bezpośrednio i zapominasz. Dotyczy to głównie dynamicznych i "zatłoczonych" projektów, w których różne gałęzie różnią się strukturą schematu.

Bez zapisania struktury schematu należy zawsze używać istniejącego schematu odniesienia w bazie danych i migrować go do tyłu lub do przodu za każdym razem, gdy zmieni się gałąź/zatwierdzenie; kilka przypadków rzeczywistych może sprawić, że proces ten będzie nieefektywny (np. gdy inna gałąź nie będzie miała niektórych migracji, lub niektóre migracje nie zostaną wycofane).

Kolejnym problemem są zautomatyzowane kompilacje, które cierpią z powodu tych samych problemów, a co gorsza, nie mogą stosować ręcznych zmian.

Jedynym minusem jest to, że wymaga pewnego nawyku, którym jest przechowywanie go za każdym razem, gdy przeprowadzasz migrację. Łatwo powiedzieć, ale łatwo zapomnieć.

Nie mówię, że nie możesz żyć bez development_structure.sql - oczywiście możesz. Ale jeśli je masz, podczas zmiany gałęzi/zatwierdzenia po prostu ładuj i zapominaj; jeśli tego nie zrobisz, możesz przejść przez szereg ręcznych czynności.

0

w szynach 3, nawet nie trzeba pisać tę linię,

config.active_record.schema_format =: sql

Można wygenerować plik structure.sql wystarczy uruchomić powyższy rozkaz natarcia wspomniany wyżej