Czyszczenie lub odtworzenie bazy danych Ruby on Rails

Mam bazę danych dev Ruby on Rails pełną danych. Chcę wszystko usunąć i odbudować bazę danych. Myślę o użyciu czegoś w rodzaju:

rake db:recreate
Czy to możliwe?
Author: random, 2010-11-07

18 answers

Znam dwa sposoby na to:

Spowoduje to zresetowanie bazy danych i ponowne wczytanie bieżącego schematu za pomocą all:

rake db:reset db:migrate

To zniszczy twój db, a następnie utworzy go, a następnie przeniesie bieżący schemat:

rake db:drop db:create db:migrate

Wszystkie dane zostaną utracone w obu scenariuszach.

 979
Author: thenengah,
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
2015-03-04 02:13:52

On Rails 4, all needed is

$ rake db:schema:load

To usunie całą zawartość Twojego DB i odtworzy schemat z twojego schematu.plik rb, bez konieczności stosowania wszystkich migracji jeden po drugim.

 146
Author: Eneko Alonso,
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
2014-01-20 04:09:55

Używam poniższej liniowej w Terminalu.

$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare

Umieściłem to jako alias powłoki i nadałem mu nazwę remigrate

Już Teraz możesz łatwo "łańcuchować" szyny zadania:

$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+
 39
Author: TK.,
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-06-26 14:50:06

Update: wraz z pojawieniem się Rails 5, to polecenie będzie dostępne za pomocą tego polecenia:

Rails db:purge db:create db:migrate RAILS_ENV=test


Od najnowszego wydania rails 4.2 możesz teraz uruchomić:

rake db:purge 

Source: commit

# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
  task :purge => [:load_config] do
    ActiveRecord::Tasks::DatabaseTasks.purge_current
  end

Może być używany razem, jak wspomniano powyżej:

rake db:purge db:create db:migrate RAILS_ENV=test
 31
Author: Robbie Guilfoyle,
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
2016-02-04 17:09:23

W zależności od tego, czego chcesz, możesz użyć...

rake db:create

... Aby zbudować bazę danych od zera z config/database.yml, lub ...

rake db:schema:load

...Aby zbudować bazę danych od podstaw z Twojego pliku schema.rb.

 27
Author: coreyward,
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
2010-11-07 01:29:48

Po prostu wykonaj sekwencję kroków: upuść bazę danych, następnie ponownie ją Utwórz, zmigruj dane, a jeśli masz nasiona, zasiej bazę danych:

rake db:drop db:create db:migrate db:seed

Ponieważ domyślnym środowiskiem dla rake jest development , jeśli widzisz wyjątek w spec testach, powinieneś ponownie utworzyć db dla środowiska test w następujący sposób:

RAILS_ENV=test rake db:drop db:create db:migrate

W większości przypadków baza danych testów jest wysiewana podczas procedur testowych, więc db:seed akcja zadania nie musi być przekazywana. W przeciwnym razie należy przygotować bazę danych:

rake db:test:prepare

Lub

RAILS_ENV=test rake db:seed

Dodatkowo, aby użyć zadania recreate możesz dodać do Rakefile następujący kod:

namespace :db do
   task :recreate => [ :drop, :create, :migrate ] do
      if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
         Rake::Task[ 'db:seed' ].invoke
      end
   end
end

Następnie wydanie:

rake db:recreate
 11
Author: Малъ Скрылевъ,
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
2014-01-28 07:52:52

Z linii poleceń uruchom

rake db:migrate:reset
 11
Author: user2747051,
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
2014-03-24 23:19:41

Użyj jak

rake db:drop db:create db:migrate db:seed
Wszystko w jednej linii. Jest to szybsze, ponieważ środowisko nie jest przeładowywane ponownie i ponownie.

Db: drop - usunie bazę danych.

Db: create - utworzy bazę danych (host / db / password zostanie pobrany z config/database.yml)

Db: migrate - uruchomi istniejące migracje z katalogu (db/migration/.rb)*.

Db: seed - uruchomi seed data z katalogu (db / migration / seed.rb) ..

Ja zwykle wolę:

rake db:reset
Zrobić wszystko na raz. Zdrówko!
 11
Author: Manish Shrivastava,
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
2015-04-20 07:24:44

Możesz zrobić ręcznie:

rake db:drop
rake db:create
rake db:migrate

Lub po prostu rake db:reset, który uruchomi powyższe kroki, ale również uruchomi Twój plik db/seeds.rb.

Dodanym niuansem jest to, że rake db:reset ładuje się bezpośrednio z pliku schema.rb, a nie uruchamia ponownie wszystkie pliki migracji.

Twoje dane są zdumione we wszystkich przypadkach.

 8
Author: Erik Trautman,
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-10-14 02:19:52

Możesz użyć następującego wiersza poleceń:

rake db:drop db:create db:migrate db:seed db:test:clone
 6
Author: user1358180,
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
2014-10-14 12:51:35

Aby upuścić konkretną bazę danych, możesz to zrobić na konsoli rails:

$rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit

A następnie ponownie migrować DB

$bundle exec rake db:migrate 
 4
Author: Kush,
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-11-06 10:44:01

On rails 4.2, aby usunąć wszystkie dane, ale zachować bazę danych

$ bin/rake db:purge && bin/rake db:schema:load

Https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md

 4
Author: Yana Agun Siswanto,
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
2016-04-06 13:18:04

Możesz użyć db:reset - dla run db: drop i db: setup lub db:migrate:reset - która uruchamia db: drop, db: create oraz db: migrate.

Dependent at you want to use exist schema.rb

 3
Author: Aleksandr Babak,
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-04-06 02:26:03

Zgodnie z rails guide , ten jeden liner powinien być używany, ponieważ ładowałby się z schema.rb zamiast przeładowywać pliki migracji jeden po drugim:

rake db:reset
 2
Author: Victor,
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-10-01 08:10:51

Ponieważ w rozwoju zawsze będziesz chciał odtworzyć bazę danych, możesz zdefiniować zadanie rake w folderze lib/tasks w ten sposób.

  namespace :db do
      task :all => [:environment, :drop, :create, :migrate] do
   end 
end

I w terminalu uruchomisz

rake db:all

Odbuduje twoją bazę danych

 1
Author: Obed Lorisson,
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
2015-07-25 18:45:27

Myślę, że najlepszym sposobem na uruchomienie tej komendy jest:

**rake db:reset** it does db:drop, db:setup
 rake db:setup does db:create, db:schema:load, db:seed
 1
Author: Thorin,
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
2016-04-19 07:37:07

Simply you can run

rake db:setup

Usunie bazę danych, utworzy nową bazę danych i wypełni bazę danych z pliku seed, jeśli utworzyłeś plik seed pewnymi danymi.

 1
Author: Touseef Murtaza,
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-06-27 09:47:49

Wprowadziłem dzisiaj sporo zmian w moim schemacie rails. Zdałem sobie sprawę, że potrzebuję dodatkowych dwóch modeli w hierarchii, a kilka innych do usunięcia. W modelach i kontrolerach wprowadzono wiele niewielkich zmian.

Dodałem dwa nowe modele i stworzyłem je, używając:

rake db:migrate

Potem edytowałem schemat.plik rb. Ręcznie usunąłem stare modele, które nie były już wymagane, zmieniłem pole klucza obcego zgodnie z wymaganiami i po prostu zmieniłem nieco kolejność, aby było jaśniejsze ja. I usunięte wszystkie Migracje, a następnie ponownie uruchomić kompilację poprzez:

rake db:reset
Zadziałało idealnie. Oczywiście wszystkie dane muszą być przeładowane. Rails zorientowali się, że migracje zostały usunięte i zresetowali znak high-water:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
 0
Author: ardochhigh,
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-10-26 11:12:32