Różnica między rake db: migrate db: reset i db: schema: load
Różnica między rake db:migrate
i rake db:reset
jest dość jasna w mojej głowie. Rzecz, której nie rozumiem, różni się od dwóch poprzednich.
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 przeprowadza migrację na świeżej bazie danych.
Proszę o pomoc w wyjaśnieniu, jeśli moje zrozumienie poszło nie tak.
4 answers
- db: migrate uruchamia (pojedyncze) migracje, które jeszcze nie zostały uruchomione.
- db: create tworzy bazę danych
- db: drop usuwa bazę danych
-
Db: schema: load tworzy tabele i kolumny w (istniejącej) bazie danych według schematu.rb
-
Db: setup robi db: create, db: schema: load, db: seed
- db: reset robi db: drop, db: setup
Zazwyczaj używasz db: migrate po wprowadzeniu zmian w schemacie poprzez nowe pliki migracji (ma to sens tylko wtedy, gdy w bazie danych są już dane). db: schema: load jest używany podczas konfigurowania nowej instancji aplikacji.
Mam nadzieję, że to pomoże.Aktualizacja dla rails 3.2.12:
Właśnie sprawdziłem źródło i zależności są teraz takie:
- db: create tworzy bazę danych dla bieżącego env
- db: create: all tworzy bazy danych dla wszystkich envs
- db: drop usuwa bazę danych dla bieżącego env
- db: drop: all usuwa bazy danych dla wszystkich ENV
- db: migrate uruchamia migracje dla bieżącego env, które nie zostały jeszcze uruchomione
- db: migrate: up uruchamia jedną migrację specyficzną
- db: migrate: down rolls back one specific migration
- db: migrate: status pokazuje bieżący status migracji
- db: rollback rolls back The last migracja
- db: forward przenosi aktualną wersję schematu do następnej
- db: seed (tylko) uruchamia db / seed.plik rb
- db: schema: load ładuje schemat do bieżącej bazy danych env
-
Db: schema: dump zrzuca bieżący schemat env (i wydaje się, że tworzy również db)
-
Db: setup uruchamia db: schema: load, db: seed
- db:reset uruchamia db: drop db: setup
- db: migrate: redo uruchamia (db: migrate: down db: migrate: up) lub (db: rollback db: migrate) w zależności od określonej migracji
- db: migrate: reset uruchamia db: drop db:create db: migrate
Aby uzyskać więcej informacji, zapoznaj się z https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (dla Rails 3.2.x) oraz https://github.com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (dla Rails 4.0.x)
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-11-27 14:27:48
TLDR
Użycie
-
rake db:migrate
Jeśli chcesz wprowadzić zmiany w schemacie -
rake db:reset
Jeśli chcesz upuścić bazę danych, przeładuj schemat zschema.rb
i prześlij ponownie bazę danych -
rake db:schema:load
Jeśli chcesz zresetować bazę danych do schematu podanego wschema.rb
(spowoduje to usunięcie wszystkich danych)
Objaśnienia
rake db:schema:load
skonfiguruje schemat podany w pliku schema.rb
. Jest to przydatne w przypadku świeżej instalacji aplikacji, ponieważ nie zajmuje to tyle czasu, co db:migrate
Ważna uwaga,
db:schema:load
usunie dane na serwerze.
rake db:migrate
wprowadza zmiany do istniejącego schematu. To jak tworzenie wersji schematu. db:migrate
poszukuje w db/migrate/
plików ruby i wykonuje migracje, które nie są jeszcze uruchomione, zaczynając od najstarszych. Rails wie, który plik jest najstarszy, patrząc na znacznik czasu na początku nazwy pliku migracji. db:migrate
ma tę zaletę, że dane mogą być również umieszczane w bazie danych. To nie jest dobra praktyka. Lepiej użyć rake db:seed
do dodania danych.
rake db:migrate
dostarcza zadania do góry, down etc, który włącza polecenia takie jak {[18] } i czyni go najbardziej użytecznym poleceniem.
rake db:reset
Czy a db:drop
i db:setup
W tym celu należy utworzyć bazę danych, wczytać schemat i zainicjalizować go za pomocą danych nasiennych.]}
Odpowiednia część poleceń z baz danych .grabie
namespace :schema do
desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
task :dump => [:environment, :load_config] do
require 'active_record/schema_dumper'
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
File.open(filename, "w:utf-8") do |file|
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
end
db_namespace['schema:dump'].reenable
end
desc 'Loads a schema.rb file into the database'
task :load => [:environment, :load_config, :check_protected_environments] do
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
end
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
task :reset => [ 'db:drop', 'db:setup' ]
namespace :migrate do
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
task :redo => [:environment, :load_config] do
if ENV['VERSION']
db_namespace['migrate:down'].invoke
db_namespace['migrate:up'].invoke
else
db_namespace['rollback'].invoke
db_namespace['migrate'].invoke
end
end
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-09-14 00:09:49
Z tego co rozumiem, to upuści twoją bazę danych i odtworzy ją na podstawie Twojego pliku db/schema.rb
. Dlatego musisz się upewnić, że Twój plik schema.rb
jest zawsze aktualny i znajduje się pod kontrolą wersji.
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-04-24 16:25:21
Możesz po prostu zajrzeć do zadań Rake Active Record, ponieważ wierzę, że tam mieszkają, jak w tym pliku. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
To, co robią, to twoje pytanie?To zależy od tego, skąd pochodzą, a to jest tylko i przykład, aby pokazać, że różnią się w zależności od zadania. Tutaj mamy inny plik pełen zadania.
Https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
Który ma te zadania.
namespace :db do
task create: ["db:mysql:build", "db:postgresql:build"]
task drop: ["db:mysql:drop", "db:postgresql:drop"]
end
To może nie odpowiedzieć na twoje pytanie, ale może dać ci pewien wgląd w śmiało i spojrzeć na źródło zwłaszcza plików rake i zadań. Ponieważ robią całkiem dobrą robotę pomagając Ci używać rails, nie zawsze dokumentują kod tak dobrze. Wszyscy możemy tam pomóc, jeśli wiemy, co ma zrobić.
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-12-04 22:24:09