Tutaj bardzo proste pytanie - jeśli migracje mogą stać się powolne i uciążliwe, gdy aplikacja staje się bardziej złożona, a rake db:schema:load
zamiast tego mamy znacznie czystsze do wywołania, dlaczego migracje w ogóle istnieją?
Jeśli odpowiedź na powyższe pytanie brzmi, że migracje są używane do kontroli wersji (krok po kroku zapis zmian w bazie danych), to gdy aplikacja staje się bardziej złożona i rake db:schema:load
jest używana częściej, czy nadal zachowują swoją podstawową funkcję?
Uwaga:
Z odpowiedzi na to pytanie: rake db:schema:load
usunie dane na serwerze produkcyjnym, więc zachowaj ostrożność podczas korzystania z niego.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
źródło
źródło
Odpowiedzi:
Migracje zapewniają zmiany krokowe do przodu i do tyłu w bazie danych. W środowisku produkcyjnym podczas wdrażania należy wprowadzać przyrostowe zmiany w bazie danych: migracje zapewniają tę funkcjonalność z możliwością wycofania w razie awarii. Jeśli uruchomisz
rake db:schema:load
na serwerze produkcyjnym, w końcu usuniesz wszystkie dane produkcyjne. Jest to niebezpieczny nawyk.Biorąc to pod uwagę, uważam, że sporadyczne „załamanie” migracji jest przyzwoitą praktyką. Wiąże się to z usunięciem starych migracji, zastąpieniem ich pojedynczą migracją (bardzo podobną do
schema.rb
pliku) i zaktualizowaniemschema_migrations
tabeli w celu odzwierciedlenia tej zmiany. Zachowaj przy tym ostrożność! Jeśli nie jesteś ostrożny, możesz łatwo usunąć dane produkcyjne.Na marginesie uważam, że nigdy nie należy umieszczać tworzenia danych w plikach migracyjnych.
seed.rb
Plik może być użyty do tego, czy zwyczaj natarcia lub wdrożyć zadania. Umieszczenie tego w plikach migracji powoduje mieszanie specyfikacji schematu bazy danych ze specyfikacją danych i może prowadzić do konfliktów podczas uruchamiania plików migracji.źródło
db:schema:load
jeśli próbują uruchomićdb:migrate
nową instalację. @ clear_migrationsWłaśnie natknąłem się na ten post, który był dawno temu i nie widziałem odpowiedzi, której się spodziewałem.
rake db:schema:load
jest świetny, gdy po raz pierwszy wprowadzasz system do produkcji. Następnie należy normalnie uruchomić migrację.Pomaga to również w czyszczeniu migracji, kiedy tylko chcesz, ponieważ schemat zawiera wszystkie informacje potrzebne do wprowadzenia innych maszyn do produkcji, nawet po wyczyszczeniu migracji.
źródło
db:schema:load
tego, poza skróceniem kilku sekund w całym cyklu rozwojowym. Czy zdarzyło Ci się pracować z aplikacją, której tworzenie trwało dłużej niż 30 sekund? Obecnie pracuję nad aplikacją, która ma błędy w swoich plikach migracji i nigdy nie będzie migrować w górę bez poprawek błędów lub uruchomienia,db:schema:load
co sprawia, że myślę, że schemat: ładowanie dotyczy sytuacji, gdy coś poszło nie tak w związku z rozwojem aplikacji.instead of editing schema.rb, please use the migrations feature
. Jeśli więcdb:schema:load
korzystasz z automatycznie wygenerowanego pliku, którego migracje nie mają być ponownie generowane automatycznie, w rzeczywistości idziesz drogą ręcznej „edycji” schematu i rezygnacji z migracji. Chciałbym mieć cytat z przewodnika po szynach na ten temat, ale nie omawiają schematu: obciążenie, co zniechęcająco zwiększa moją frustrację przy podejmowaniu decyzji, jak podejść do schematu: funkcja ładowania. = /rake db:schema:load
w przeciwieństwie dorake db:migrate
. Od tego momentu możeszrake db:migrate
.Migracje umożliwiają również dodawanie danych do bazy danych. ale db: schema: load ładuje tylko schemat.
źródło
Ponieważ migracje można cofnąć i zapewnić dodatkowe funkcje. Na przykład, jeśli chcesz zmodyfikować niektóre dane w ramach zmiany schematu, musisz to zrobić jako migrację.
źródło
Jako użytkownik innych ORM-ów zawsze wydawało mi się dziwne, że Railsy nie mają funkcji „synchronizacji i aktualizacji”. tj. korzystając z pliku schematu (który reprezentuje cały, aktualny schemat), przejrzyj istniejącą strukturę bazy danych i dodaj / usuń tabele, kolumny, indeksy zgodnie z wymaganiami.
Dla mnie byłoby to dużo bardziej solidne, nawet jeśli być może trochę wolniejsze.
źródło
schema
jest to master, a nie migracje.Napisałem już jako komentarz, ale wydaje mi się, że lepiej umieścić komentarze z pliku db / schema.rb tutaj:
Właściwie z mojego doświadczenia wynika, że lepiej jest umieścić pliki migracji w git, a nie plik schema.rb ...
źródło
rake db:migrate
skonfigurować tabele w bazie danych. Po uruchomieniu komendy migracji, będzie ona szukała w db / migrate / wszelkich plików ruby i wykonywała je, zaczynając od najstarszego. Na początku każdej nazwy pliku migracji znajduje się sygnatura czasowa.W przeciwieństwie do
rake db:migrate
tego uruchamia migracje, które nie zostały jeszcze uruchomione,rake db:schema:load
ładuje schemat, który jest już wygenerowany wdb/schema.rb
bazie danych.Możesz dowiedzieć się więcej o poleceniach bazy danych rake tutaj .
źródło