Różnica między rake db:migrate
i rake db:reset
jest całkiem wyraźna w mojej głowie. Rzecz, której nie rozumiem, rake db:schema:load
różni się od poprzednich dwóch.
Dla pewności, że jestem na tej samej stronie:
rake db:migrate
- Uruchamia migracje, które nie zostały jeszcze uruchomione.rake db:reset
- Czyści bazę danych (prawdopodobnie robirake db:drop
+rake db:create
+rake db:migrate
) i uruchamia migrację na świeżej bazie danych.
Proszę o pomoc w wyjaśnieniu, jeśli moje zrozumienie poszło nie tak.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
źródło
źródło
rake --tasks
pomagarake db:migrate
jest prawidłowe, ale twoje zrozumienierake db:reset
jest błędne. Zobacz najwyższą odpowiedź od Moritza.rails db:migrate
,rails db:reset
,rails db:schema:load
. Zobacz stackoverflow.com/questions/38403533/…Odpowiedzi:
db: schema: load tworzy tabele i kolumny w (istniejącej) bazie danych zgodnie ze schema.rb
db: setup robi db: create, db: schema: load, db: seed
Zazwyczaj korzystasz z db: migruj po wprowadzeniu zmian w schemacie za pomocą nowych plików migracji (ma to sens tylko wtedy, gdy w bazie danych są już dane). db: schema: load jest używany podczas konfigurowania nowego wystąpienia aplikacji.
Mam nadzieję że to pomogło.
AKTUALIZACJA dla szyn 3.2.12:
Właśnie sprawdziłem źródło i zależności są teraz takie:
db: schema: dump zrzuca bieżący schemat env (i wydaje się również tworzyć db)
db: setup uruchamia db: schema: load, db: seed
Więcej informacji można znaleźć na https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (dla Rails 3.2.x) i https: // github .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / databases.rake (dla Rails 4.0.x)
źródło
db:create
razie potrzeby. Przynajmniej od szyn 4.0.2.rake db:migrate
podczas wywoływania,rake db:setup
jeśli istnieją oczekujące migracje, ale nie wykonają oczekujących migracji.TLDR
Posługiwać się
rake db:migrate
Jeśli chcesz wprowadzić zmiany w schemacierake db:reset
Jeśli chcesz usunąć bazę danych, załaduj ponownie schemat zschema.rb
i ponownie uruchom bazę danychrake db:schema:load
Jeśli chcesz zresetować bazę danych do schematu zgodnie z opisem wschema.rb
(spowoduje to usunięcie wszystkich danych)Objaśnienia
rake db:schema:load
skonfiguruje schemat zgodnie zschema.rb
plikiem. Jest to przydatne w przypadku nowej instalacji aplikacji, ponieważ nie zajmuje tyle czasu, codb:migrate
rake db:migrate
wprowadza zmiany do istniejącego schematu. To jak tworzenie wersji schematu.db:migrate
wyszukadb/migrate/
wszystkie pliki ruby i wykona migracje, które nie zostały jeszcze uruchomione, zaczynając od najstarszej. Railsy wiedzą, który plik jest najstarszy, patrząc na znacznik czasu na początku nazwy pliku migracji.db:migrate
ma tę zaletę, że dane można również umieszczać w bazie danych. To właściwie nie jest dobra praktyka. Lepiej jest używaćrake db:seed
do dodawania danych.rake db:migrate
zapewnia zadania w górę , w dół itp., które umożliwiają polecenia takie jakrake db:rollback
i sprawiają, że jest to najbardziej przydatne polecenie.rake db:reset
robi adb:drop
idb:setup
Upuszcza bazę danych, tworzy ją ponownie, ładuje schemat i inicjuje z danymi źródłowymi
Odpowiednia część poleceń z bazy danych.rake
źródło
O ile rozumiem, usunie bazę danych i ponownie ją utworzy na podstawie
db/schema.rb
pliku. Dlatego musisz upewnić się, żeschema.rb
plik jest zawsze aktualny i znajduje się pod kontrolą wersji.źródło
Możesz po prostu spojrzeć na zadania Active Record Rake, ponieważ tutaj, jak sądzę, mieszkają tak jak w tym pliku. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
Co robią, to twoje pytanie jest słuszne?
To zależy od tego, skąd pochodzą, a to tylko przykład pokazujący, że różnią się w zależności od zadania. Tutaj mamy inny plik pełen zadań.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
który ma te zadania.
To może nie odpowiedzieć na twoje pytanie, ale może dać ci wgląd w źródła i przejrzyj źródła, szczególnie pliki rake i zadania. Ponieważ wykonują całkiem niezłą robotę, pomagając w używaniu szyn, nie zawsze tak dobrze dokumentują kod. Wszyscy moglibyśmy pomóc, jeśli wiemy, co ma zrobić.
źródło
ZAKTUALIZOWANO dla Rails 5:
db:create
- Tworzy bazę danych dla bieżącego środowiska RAILS_ENV . Jeśli RAILS_ENV nie jest określony, domyślnie są to baz danych programowania i testowania.db:create:all
- Tworzy bazę danych dla wszystkich środowisk.db:drop
- Zrzuca bazę danych dla bieżącego środowiska RAILS_ENV . Jeśli RAILS_ENV nie jest określony, domyślnie są to baz danych programowania i testowania.db:drop:all
- Zrzuca bazę danych dla wszystkich środowisk.db:migrate
- Uruchamia migracje dla bieżącego środowiska, które jeszcze nie zostało uruchomione. Domyślnie migracje będą uruchamiane tylko w środowisku programistycznym.db:migrate:redo
- Uruchamia db: migracja: w dół i db: migracja: w górę lub db: migracja: wycofanie i db: migracja: w górę w zależności od określonej migracji.db:migrate:up
- Uruchamia się dla danej WERSJI migracji.db:migrate:down
- Działa w dół dla danej WERSJI migracji.db:migrate:status
- Wyświetla bieżący status migracji.db:migrate:rollback
- Cofa ostatnią migrację.db:version
- Drukuje bieżącą wersję schematu.db:forward
- Przesuwa schemat do następnej wersji.db:seed
- Uruchamia plik db / seeds.rb .db:schema:load
Odtwarza bazę danych z pliku schema.rb .db:schema:dump
Zrzuca schemat bieżącego środowiska do db / schema.rb .db:structure:load
- Odtwarza bazę danych z pliku structure.sql .db:structure:dump
- Zrzuca schemat bieżącego środowiska do db / structure.sql . (Możesz określić inny plik za pomocąSCHEMA=db/my_structure.sql
)db:setup
Uruchamia db: create , db: schema: load i db: seed .db:reset
Uruchamia db: drop i db: setup .db:migrate:reset
- Uruchamia db: drop , db: create i db: migrate .db:test:prepare
- Sprawdź oczekujące migracje i załaduj schemat testowy. (Jeśli uruchomisz rake bez żadnych argumentów, zrobi to domyślnie.)db:test:clone
- Odtwórz ponownie testową bazę danych ze schematu bazy danych bieżącego środowiska.db:test:clone_structure
- Podobne do db: test: klon , ale zapewni, że twoja testowa baza danych będzie miała taką samą strukturę, w tym zestawy znaków i zestawienia, jak baza danych bieżącego środowiska.db:environment:set
- Ustaw aktualny RAILS_ENV środowiska w ar_internal_metadata tabeli. (Używany jako część kontroli chronionego środowiska).db:check_protected_environments
- Sprawdza, czy w obecnym środowisku RAILS_ENV można wykonać akcję destrukcyjną . Używane wewnętrznie podczas działania destrukcyjnego, takiego jak db: drop lub db: schema: load .źródło