Разница между 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, они не всегда документируют код так хорошо. Мы все могли бы помочь, если бы знали, что это такое. делать.