Разница между rake db:migrate
и rake db:reset
довольно ясна в моей голове. То, что я не понимаю, это то, как rake db:schema:load
отличается от первых двух.
Просто чтобы быть уверенным, что я на той же странице:
rake db:migrate
- Запускает миграции, которые еще не выполнялись.rake db:reset
- Очищает база данных (предположительно делаетrake db:drop
+rake db:create
+rake db:migrate
) и запускает миграцию на свежую базу данных.
Пожалуйста, помогите уточнить, если мое понимание пошло не так.
ruby-on-rails
ruby
database
rake
Гаурав Агарвал
источник
источник
rake --tasks
?rake db:migrate
верно, но ваше пониманиеrake db:reset
неправильно. Смотрите самый верхний ответ от Морица.rails db:migrate
,rails db:reset
,rails db:schema:load
. См stackoverflow.com/questions/38403533/...Ответы:
db: schema: load создает таблицы и столбцы в (существующей) базе данных, следующей за schema.rb
db: setup выполняет db: create, db: schema: load, db: seed
Обычно вы используете db: migrate после внесения изменений в схему с помощью новых файлов миграции (это имеет смысл, только если в базе данных уже есть данные). db: schema: load используется при настройке нового экземпляра вашего приложения.
Надеюсь, это поможет.
ОБНОВЛЕНИЕ для рельсов 3.2.12:
Я только что проверил источник и зависимости теперь такие:
db: schema: dump создает дамп текущей схемы env (и, похоже, также создает базу данных)
db: установка запускается db: схема: загрузка, db: семя
Для получения дополнительной информации просмотрите https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (для Rails 3.2.x) и https: // github. .com / rails / rails / blob / v4.0.5 / activerecord / lib / active_record / railties / database.rake (для Rails 4.0.x)
источник
db:create
при необходимости. По крайней мере, на рельсах 4.0.2.rake db:migrate
при вызове,rake db:setup
если есть ожидающие миграции, но не будет выполнять ожидающие миграции.TLDR
использование
rake db:migrate
Если вы хотите внести изменения в схемуrake db:reset
Если вы хотите удалить базу данных, перезагрузите схему изschema.rb
нее и заново заполните базу данныхrake db:schema:load
Если вы хотите сбросить базу данных в схему, как указано вschema.rb
(Это удалит все данные)Пояснения
rake db:schema:load
настроит схему, как указано вschema.rb
файле. Это полезно для новой установки приложения, так как не занимает столько времени, сколькоdb:migrate
rake db:migrate
вносит изменения в существующую схему. Это похоже на создание версий схемы.db:migrate
будет искатьdb/migrate/
любые рубиновые файлы и выполнять миграции, которые еще не запущены, начиная с самых старых. Rails знает, какой файл самый старый, посмотрев на метку времени в начале имени файла миграции.db:migrate
Преимущество заключается в том, что данные также могут быть помещены в базу данных. На самом деле это не очень хорошая практика. Лучше использоватьrake db:seed
для добавления данных.rake db:migrate
предоставляет задачи вверх , вниз и т. д., что позволяет такие команды, какrake db:rollback
и делает его наиболее полезной команды.rake db:reset
делаетdb:drop
иdb:setup
удаляет базу данных, создает ее снова, загружает схему и инициализирует начальными данными
Соответствующая часть команд из database.rake
источник
Насколько я понимаю, он собирается удалить вашу базу данных и воссоздать ее на основе вашего
db/schema.rb
файла. Вот почему вы должны убедиться, что вашschema.rb
файл всегда актуален и находится под контролем версий.источник
Вы можете просто посмотреть на задачи Active Record Rake, потому что именно там, как я полагаю, они живут, как в этом файле. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
Что они делают, это твой вопрос, верно?
Это зависит от того, откуда они берутся, и это просто пример того, как они различаются в зависимости от задачи. Здесь у нас есть другой файл, полный задач.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
у которого есть эти задачи.
Это может не дать ответа на ваш вопрос, но может дать вам некоторое представление о том, что нужно сделать, и посмотреть на источник, особенно на файлы и задачи рейка. Поскольку они довольно хорошо помогают вам использовать рельсы, они не всегда хорошо документируют код. Мы все могли бы помочь там, если бы знали, что он должен делать.
источник
ОБНОВЛЕНО для Rails 5:
db:create
- Создает базу данных для текущей среды RAILS_ENV . Если RAILS_ENV не указан, по умолчанию используются базы данных разработки и тестирования.db:create:all
- Создает базу данных для всех сред.db:drop
- Удаляет базу данных для текущей среды RAILS_ENV . Если RAILS_ENV не указан, по умолчанию используются базы данных разработки и тестирования.db:drop:all
- Удаляет базу данных для всех сред.db:migrate
- Запускает миграции для текущей среды, которые еще не запущены. По умолчанию он запускает миграции только в среде разработки.db:migrate:redo
- Запускает db: migrate: вниз и db: migrate: вверх или db: migrate: откат и db: migrate: вверх в зависимости от указанной миграции.db:migrate:up
- Запускает для данной миграции версии.db:migrate:down
- запускает вниз для данной миграции версии.db:migrate:status
- Отображает текущий статус миграции.db:migrate:rollback
- Откатывает последнюю миграцию.db:version
- Печатает текущую версию схемы.db:forward
- выдвигает схему к следующей версии.db:seed
- Запускает файл db / seeds.rb .db:schema:load
Восстанавливает базу данных из файла schema.rb .db:schema:dump
Сохраняет схему текущей среды в db / schema.rb .db:structure:load
- воссоздает базу данных из structure.sql файла.db:structure:dump
- Сбрасывает схему текущей среды в db / structure.sql . (Вы можете указать другой файл с помощьюSCHEMA=db/my_structure.sql
)db:setup
Запускает db: create , db: schema: load и db: seed .db:reset
Запускает db: drop и db: setup .db:migrate:reset
- Запускает db: drop , db: create и db: migrate .db:test:prepare
- Проверьте наличие отложенных миграций и загрузите схему тестирования. (Если вы запустите rake без аргументов, он сделает это по умолчанию.)db:test:clone
- Воссоздать тестовую базу данных из схемы базы данных текущей среды.db:test:clone_structure
- Аналогичен db: test: clone , но он гарантирует, что ваша тестовая база данных будет иметь ту же структуру, включая наборы символов и сопоставления, что и база данных вашей текущей среды.db:environment:set
- Установите текущую RAILS_ENV среды в ar_internal_metadata таблице. (Используется как часть проверки защищенной среды.)db:check_protected_environments
- Проверяет, можно ли выполнить разрушительное действие в текущей среде RAILS_ENV . Используется внутри при выполнении разрушительного действия, такого как db: drop или db: schema: load .источник