Odpowiedzi:
Jeśli uruchomisz a rake -T
, wyświetli się lista wszystkich możliwych zadań rake'u dla twojego projektu Rails. Jednym z nich jest db: schema: dump, który odtworzy plik schema.rb dla aplikacji Rails z bazy danych.
bundle exec rake db:schema:dump
rake db:schema:dump
na railsach 2.0
Ostrożny,
rake db:schema:dump
zrzuci bieżący schemat DB Z DB . Oznacza to, że jeśli wprowadziłeś jakiekolwiek zmiany w swoich migracjach, NIE zostaną one odzwierciedlone w pliku schema.rb, który nie jest tym, czego chcesz IMO.
Jeśli chcesz ponownie utworzyć schemat na podstawie migracji, wykonaj następujące czynności:
rake db:drop # ERASES THE DATABASE !!!!
rake db:create
rake db:migrate
rake db:schema:dump
polecenie.
KOLEJKI 5-drożne:
rails db:schema:dump
lub jeśli spotkasz Gem :: LoadError to:
bundle exec rails db:schema:dump
Uwaga:
w rails 5 zaleca się, aby zadania były generowane / wykonywane przy użyciu rails
zamiast rake
, należy to pamiętać, zadania generowane przez railsy mają rozszerzenie .rake
patrz w lib/tasks/myTask.rake
. co oznacza, że zadanie to można również wykonać przez poprzedzanie rake
.
Jeśli regenerujesz się schema.rb
lokalnie, powinno być dobrze. Po prostu zawiera reprezentację struktury tabel bazy danych. Same dane nie są zawarte w tym pliku.
Aby zregenerować schema.rb
plik, uruchom:
bundle exec rake db:schema:dump
Następnie po prostu zatwierdź nowy schema.rb
plik i powinieneś być w dobrej formie!
Bezpośrednio z samego pliku schema.rb:
Jeśli chcesz utworzyć bazę danych aplikacji w innym systemie, powinieneś używać
db:schema:load
, a nie uruchamiać wszystkich migracji od zera. To drugie jest podejściem wadliwym i niezrównoważonym (im więcej migracji zgromadzisz, tym wolniej będzie działać i tym większe prawdopodobieństwo problemów).
Więc NIE rób sugestii rake db:migrate
, która została zasugerowana w - w czasie tego pisania - najniżej ocenianej odpowiedzi.
Miałem również podobny problem, w którym mój stary schemat nie odświeżał się, nawet jeśli usunąłem migrację.
Więc porzuciłem wszystkie istniejące tabele w bazie danych i ponownie je zmigrowałem. Uruchomienie polecenia „db: schema: load” dało mi nowy plik schema.rb.
drop table my_table_name // deleted them individually
rake db:migrate
rake db:schema:dump // re-created a new schema