Mam bazę danych deweloperów Ruby on Rails pełną danych. Chcę usunąć wszystko i odbudować bazę danych. Myślę o użyciu czegoś takiego:
rake db:recreate
czy to możliwe?
Mam bazę danych deweloperów Ruby on Rails pełną danych. Chcę usunąć wszystko i odbudować bazę danych. Myślę o użyciu czegoś takiego:
rake db:recreate
czy to możliwe?
rake db:drop db:create db:schema:load
może być bardziej odpowiednie niżrake db:drop db:create db:migrate
(chociaż jestem gotowy się mylić w tej sprawie).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Zwykle uciekam siędb:schema:load
, gdy migracje są przerywane. Rzadko muszę odtwarzać bazę danych, więc szybkość nie ma większego znaczenia. Ponadto, jeśli masz niestosowane migracjedb:schema:load
idb:reset
nie zastosujesz ich. Nie jestem pewien, czy to duży argument.Odpowiedzi:
Znam dwa sposoby, aby to zrobić:
Spowoduje to zresetowanie bazy danych i ponowne załadowanie bieżącego schematu ze wszystkimi:
Spowoduje to zniszczenie bazy danych, a następnie utworzenie jej i migrację bieżącego schematu:
Wszystkie dane zostaną utracone w obu scenariuszach.
źródło
rake db:reset
uruchamia także wszystkie migracje (przynajmniej na Rails 3), więc to powinno być wszystko, co jest potrzebne, prawda?rake db:test:prepare
testowanie, w przeciwnym razie pojawi się błąd:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
irake db:drop db:create db:migrate
zrobić dwie różne rzeczy . Ten ostatni usuwa całą bazę danych aplikacji, odtwarza ją, a następnie przechodzi każdą migrację, aby zaktualizować schemat (db/schema.rb
lubdb/structure.sql
), ale nie wypełnia go danymi źródłowymi. Pierwszy zamiast tego jest aliasem dlarake db:drop db:schema:load db:seed
, więc usuwa całą bazę danych aplikacji, ale nie aktualizuje schematu , a następnie zapełnia danymi źródłowymi. Jeśli więc nic nie zmieniłeś w swoich migracjach, pierwsza jest szybsza, druga bezpieczniejsza.W Railsach 4 wszystko jest potrzebne
Spowodowałoby to usunięcie całej zawartości bazy danych i odtworzenie schematu z pliku schema.rb bez konieczności stosowania wszystkich migracji jeden po drugim.
źródło
db:drop
idb:create
byłem zbędny.Korzystam z jednego linijki w terminalu.
Umieściłem to jako alias powłoki i nazwałem to
remigrate
Do tej pory możesz łatwo „połączyć” zadania Railsowe:
źródło
db:reset
, to tylko Google (lub sprawdź Przewodniki ). Moim komentarzem nie było odradzanie używania tego, ale unikanie używania,db:migrate
gdy naprawdę chceszdb:schema:load
.rake
, tak jak poniżej:rake db:drop db:create db:schema:load
.db:migrate
... podczas gdydb:schema:load
jest wrażliwy na to, że ktoś zapomina sprawdzić schema.rb w kontroli wersji wraz z nową migracją.Aktualizacja: W Railsach 5 to polecenie będzie dostępne za pomocą tego polecenia:
rails db:purge db:create db:migrate RAILS_ENV=test
Od najnowszej wersji Rails 4.2 możesz teraz uruchomić:
Źródło: commit
Można go używać razem, jak wspomniano powyżej:
źródło
db:purge
„usuń wszystkie dane, ale zachowaj całą tabelę i kolumny”db:purge
nie zachowuje tabel.W zależności od tego, czego chcesz, możesz użyć…
rake db:create
… Aby zbudować bazę danych od zera
config/database.yml
lub…rake db:schema:load
… Aby zbudować bazę danych od zera z
schema.rb
pliku.źródło
Z linii poleceń uruchom
źródło
schema.rb
i jeśli tylkodrop
icreate
,migrate
nic nie zrobi (testowane na szynach 6)Użyj jak
Wszystko w jednym wierszu. Jest to szybsze, ponieważ środowisko nie jest ponownie ładowane ponownie.
db: upuść - spowoduje usunięcie bazy danych.
db: create - utworzy bazę danych (host / db / hasło zostaną pobrane z config / database.yml)
db: migrate - uruchomi istniejące migracje z katalogu (db / migracja / igration .rb) *.
db: seed - uruchomi dane seed możliwe z katalogu (db /igration / seed.rb) ..
Zwykle wolę:
robić wszystko naraz.
Twoje zdrowie!
źródło
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Wystarczy wydać sekwencję kroków: upuść bazę danych, a następnie ponownie ją utwórz, migruj dane, a jeśli masz nasiona, siej bazę danych:
Ponieważ domyślnym środowiskiem dla programistów
rake
jest programowanie , w przypadku zauważenia wyjątku w testach specyfikacji, należy ponownie utworzyć db dla środowiska testowego w następujący sposób:W większości przypadków testowa baza danych jest zasiewana podczas procedur testowych, więc
db:seed
nie jest wymagane wykonanie zadania. W przeciwnym razie musisz przygotować bazę danych:lub
Dodatkowo, aby użyć zadania ponownego tworzenia , możesz dodać do Rakefile następujący kod:
Następnie wydaj:
źródło
Możesz ręcznie:
Lub po prostu
rake db:reset
, który uruchomi powyższe kroki, ale również uruchomi twojedb/seeds.rb
plik.Dodatkowym niuansem jest to, że
rake db:reset
ładuje się bezpośrednio zschema.rb
pliku, w przeciwieństwie do ponownego uruchamiania wszystkich plików migracji.Twoje dane są usuwane we wszystkich przypadkach.
źródło
Możesz użyć następującego wiersza poleceń:
źródło
Aby usunąć konkretną bazę danych, możesz to zrobić na konsoli Rails:
A następnie ponownie migruj DB
źródło
Na szynach 4.2, aby usunąć wszystkie dane, ale zachować bazę danych
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
źródło
Możesz użyć
db:reset
- do uruchomienia db: drop i db: setup lubdb:migrate:reset
- który uruchamia db: drop, db: create i db: migrate.zależny od którego chcesz użyć istnieje schema.rb
źródło
Według przewodnika po Railsach należy użyć tego jednego linera, ponieważ ładowałby się on
schema.rb
zamiast przeładowywać pliki migracji jeden po drugim:źródło
Ponieważ w fazie projektowania zawsze będziesz chciał ponownie utworzyć bazę danych, możesz zdefiniować zadanie prowizji w folderze lib / task w ten sposób.
a w terminalu będziesz biec
odbuduje twoją bazę danych
źródło
Myślę, że najlepszym sposobem na uruchomienie tego polecenia:
źródło
Po prostu możesz biegać
rake db:setup
Porzuci bazę danych, utworzy nową bazę danych i zapełni bazę danych z nasion, jeśli utworzyłeś plik z nasionami z pewnymi danymi.
źródło
3 opcje, ten sam wynik:
1. Wszystkie kroki:
2. Zresetuj:
3. Migruj: reset:
Uwagi:
źródło
Dzisiaj dokonałem kilku zmian w moim schemacie szyn. Uświadomiłem sobie, że potrzebuję dwóch dodatkowych modeli w hierarchii, a niektóre inne należy usunąć. W modelach i kontrolerach było wiele drobnych zmian.
Dodałem dwa nowe modele i stworzyłem je, używając:
Następnie edytowałem plik schema.rb. Ręcznie usunąłem stare modele, które nie były już potrzebne, zmieniłem pole klucza obcego zgodnie z wymaganiami i po prostu zmieniłem nieco jego kolejność, aby było dla mnie bardziej zrozumiałe. I usunięte wszelkie migracje, a następnie ponowne prowadził budować poprzez:
Działa idealnie. Oczywiście wszystkie dane muszą zostać ponownie załadowane. Railsy zdały sobie sprawę, że migracje zostały usunięte i zresetowały znak wysokiego poziomu:
źródło