rake db: schema: load vs. migrations

Bardzo proste pytanie-jeśli migracje mogą być powolne i uciążliwe, ponieważ aplikacja staje się bardziej złożona i jeśli mamy dużo czystsze rake db:schema:load 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 bardziej, czy nadal zachowują swoją podstawową funkcję?


Uwaga:

Z odpowiedzi na to pytanie: rake db:schema:load usunie dane na serwerze produkcyjnym, więc należy zachować ostrożność podczas korzystania z niego.

Author: sscirrus, 2011-05-06

7 answers

Migracje zapewniają zmiany w bazie danych w przód i w tył. W środowisku produkcyjnym konieczne jest wprowadzanie przyrostowych zmian w bazie danych podczas wdrażania: migracje zapewniają tę funkcjonalność z zabezpieczeniem przed wycofaniem. Jeśli uruchomisz rake db: schema: load na serwerze produkcyjnym, usuniesz wszystkie dane produkcyjne. To niebezpieczny nawyk.

Biorąc to pod uwagę, uważam, że to przyzwoita praktyka, aby od czasu do czasu "zawalić" migracje. Pociąga to za sobą usuwanie starych migracji, zastąpienie ich pojedynczą migracją (bardzo podobne do schematu.plik rb) i aktualizowanie tabeli "schema_migrations" w celu odzwierciedlenia tej zmiany. BĄDŹ BARDZO OSTROŻNY PODCZAS ROBIENIA TEGO! Możesz bardzo łatwo usunąć dane produkcyjne, jeśli nie jesteś ostrożny.

Na marginesie, jestem przekonany, że nigdy nie należy umieszczać tworzenia danych w plikach migracji. Ziarno.plik rb może być używany do tego, lub niestandardowe rake lub wdrożyć zadania. Umieszczanie tego w plikach migracyjnych miesza Twoje Specyfikacja schematu bazy danych ze specyfikacją danych i może prowadzić do konfliktów podczas uruchamiania plików migracji.

 184
Author: jesse reiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-06 01:36:55

Wł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 po raz pierwszy umieścić system w produkcji. Następnie należy uruchomić migracje normalnie.

To również pomaga w czyszczeniu migracji, kiedy tylko chcesz, ponieważ schemat zawiera wszystkie informacje umożliwiające uruchomienie innych maszyn nawet po wyczyszczeniu migracji.

 27
Author: ereslibre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-13 22:11:53

Migracje pozwalają również dodawać dane do bazy danych. ale db: schema: load ładuje tylko schemat .

 8
Author: Shaunak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-09 15:34:51

Ponieważ migracje mogą być wycofane i zapewniają dodatkową funkcjonalność. Na przykład, jeśli musisz zmodyfikować niektóre dane w ramach zmiany schematu, musisz to zrobić jako migrację.

 5
Author: Jamie Penney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 23:42:24

Jako użytkownik innych ORM-ów zawsze wydawało mi się dziwne, że Rails nie ma funkcji "synchronizacji i aktualizacji". ie, używając pliku schematu (który reprezentuje cały, aktualny schemat), przejdź przez istniejącą strukturę DB i Dodaj/usuń tabele, kolumny, indeksy zgodnie z wymaganiami.

Dla mnie byłoby to o wiele bardziej wytrzymałe, nawet jeśli może trochę wolniejsze.

 4
Author: Dan James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-26 11:40:45

Już napisałem jako komentarz, ale uważam, że lepiej umieścić komentarze db / schema.plik rb tutaj:

# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

Właściwie, moje doświadczenie jest takie, że lepiej jest umieścić pliki migracji w git, a nie schemat.plik rb...

 0
Author: user1251840,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 12:50:28

rake db:migrate Ustaw tabele w bazie danych. Po uruchomieniu polecenia migration, będzie ono szukać w db/migrate/ dowolnych plików ruby i wykonywać je zaczynając od najstarszych. Na początku każdej nazwy pliku migracji znajduje się znacznik czasu.

W przeciwieństwie do rake db:migrate, która uruchamia migracje, które jeszcze nie zostały uruchomione, rake db:schema:load ładuje schemat, który został już wygenerowany w db/schema.rbdo bazy danych.

Możesz dowiedzieć się więcej o poleceniach bazy danych rake tutaj .

 0
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 14:15:45