Разница между rake db: migrate db: reset и db: schema: load
разницу между rake db:migrate
и rake db:reset
довольно ясно в моей голове. Чего я не понимаю, так это как!--2--> отличается от первых двух.
просто чтобы убедиться, что я на той же странице:
-
rake db:migrate
- запускает миграции, которые еще не были запущены. -
rake db:reset
- очищает базу данных (предположительно делаетrake db:drop
+rake db:create
+rake db:migrate
) и выполняет миграцию на новой базе данных.
пожалуйста, помогите уточнить, если мое понимание пошло не так.
4 ответов
- db: migrate работает (один) миграции, которые еще не запущены.
- db: create создать базу данных
- db: drop удаляет базу данных
db: schema: load создает таблицы и столбцы в (существующей) базе данных по следующей схеме.rb
db: setup does db: create, db: schema: load, дБ:семя
- db: сброс делает db: drop, db: setup
обычно вы используете db: migrate после внесения изменений в схему с помощью новых файлов миграции (это имеет смысл, только если в базе данных уже есть данные). db: schema: load используется при настройке нового экземпляра приложения.
надеюсь, это поможет.
обновление для rails 3.2.12:
я только что проверил источник и зависимости вот такие сейчас:
- db: create создает базу данных для текущего env
- db: create: all создает базы данных для всех envs
- db: drop отбрасывает базу данных для текущего env
- db: drop: all отбрасывает базы данных для всех envs
- db: migrate выполняет миграции для текущего env, которые не были запущены еще
- db: migrate: up выполняется одна конкретная миграция
- db: migrate: down откат одной конкретной миграции
- db: migrate: status показывает текущий статус миграции
- db: откат откат последней миграции
- db: вперед продвигает текущую версию схемы к следующей
- db: seed (только) запускает db / seed.рубидий файл
- db: schema: load загружает схему в текущую базу данных env
db: schema: dump сбрасывает текущую схему env (и, похоже, также создает db)
db: setup запускает db: schema:load, db: seed
- db: сброс запускает db: drop db: setup
- db: migrate: redo работает (дБ:миграция:вниз, дБ:перенос:вверх) или (дБ:откат db: migrate) в зависимости от указанной миграции
- db: migrate: reset запускает db: drop db:create db: migrate
для получения дополнительной информации, пожалуйста, посмотрите на https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (для рельсов 3.2.x) и https://github.com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (для Rails 4.0.x)
TLDR
использовать
-
rake db:migrate
Если вы хотите внести изменения в схемы -
rake db:reset
если вы хотите удалить базу данных, перезагрузите схему изschema.rb
, и переустановить базу данных -
rake db:schema:load
если вы хотите сбросить базу данных в схему, как указано вschema.rb
(это удалит все данные)
объяснениями
rake db:schema:load
настроит схему, как указано в . Это полезно для новая установка приложения, как это не займет столько времени, сколько db:migrate
важное примечание,
db:schema:load
будет удалить данные на сервер.
rake db:migrate
вносит изменения в существующие схемы. Это похоже на создание версий schema. db:migrate
посмотрю в db/migrate/
для любых файлов ruby и выполнения миграций, которые еще не запущены, начиная с самого старого. Rails знает, какой файл является самым старым, глядя на метку времени в начале имя файла миграции. db:migrate
поставляется с преимуществом, что данные также могут быть помещены в базу данных. На самом деле это не очень хорошая практика. Его лучше использовать rake db:seed
добавить данные.
rake db:migrate
задачи до, вниз etc который включает команды как rake db:rollback
и делает его наиболее полезным команде.
rake db:reset
тут db:drop
и db:setup
Он отбрасывает базу данных, создает ее снова, загружает схему и инициализирует с помощью данные семян
соответствующая часть команд из базы данных.рейк!--48-->
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
насколько я понимаю, он собирается удалить вашу базу данных и воссоздать ее на основе вашего . Именно поэтому вам нужно убедиться, что ваш 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
который имеет эти задачи.
namespace :db do
task create: ["db:mysql:build", "db:postgresql:build"]
task drop: ["db:mysql:drop", "db:postgresql:drop"]
end
Это не может ответить на ваш вопрос, но может дать вам некоторое представление о идти вперед и искать источник за грабли файлы и задачи. Поскольку они делают довольно хорошую работу, помогая вам использовать rails, они не всегда документируют код так хорошо. Мы все могли бы помочь, если бы знали, что это такое. делать.