Diferencia entre rake db:migrate db:reset y db:schema:load

Resuelto Gaurav Agarwal asked hace 12 años • 6 respuestas

La diferencia entre rake db:migratey rake db:resetes bastante clara para mí. Lo que no entiendo es en qué rake db:schema:loadse diferencia de los dos anteriores.

Sólo para estar seguro de que estoy en la misma página:

  • rake db:migrate- Ejecuta las migraciones que aún no se han ejecutado.
  • rake db:reset- Borra la base de datos (presumiblemente hace un rake db:drop+ rake db:create+ rake db:migrate) y ejecuta la migración en una base de datos nueva.
Gaurav Agarwal avatar Apr 24 '12 23:04 Gaurav Agarwal
Aceptado
  • db:migrate ejecuta migraciones (únicas) que aún no se han ejecutado.

  • db:create crea la base de datos

  • db:drop elimina la base de datos

  • db:schema:load crea tablas y columnas dentro de la base de datos existente siguiendo el esquema.rb. Esto eliminará los datos existentes.

  • db:setup hace db:create, db:schema:load, db:seed

  • db:reset hace db:drop, db:setup

  • db:migrate:reset hace db:drop, db:create, db:migrate

Normalmente, utilizaría db:migrate después de haber realizado cambios en el esquema mediante nuevos archivos de migración (esto sólo tiene sentido si ya hay datos en la base de datos). db:schema:load se utiliza cuando configura una nueva instancia de su aplicación.


Para carriles 3.2.12:

Acabo de verificar la fuente y las dependencias son así ahora:

  • db:create crea la base de datos para el entorno actual

  • db:create:all crea las bases de datos para todos los entornos

  • db:drop elimina la base de datos para el entorno actual

  • db:drop:all elimina las bases de datos para todos los entornos

  • db:migrate ejecuta migraciones para el entorno actual que aún no se han ejecutado

  • db:migrate:up ejecuta una migración específica

  • db:migrate:down deshace una migración específica

  • db:migrate:status muestra el estado de migración actual

  • db:rollback revierte la última migración

  • db:forward avanza la versión del esquema actual a la siguiente

  • db:seed (solo) ejecuta el archivo db/seed.rb

  • db:schema:load carga el esquema en la base de datos del entorno actual

  • db:schema:dump vuelca el esquema del entorno actual (y parece crear la base de datos también)

  • db:setup ejecuta db:create db:schema:load db:seed

  • db:reset ejecuta db:drop db:setup

  • db:migrate:redo se ejecuta (db:migrate:down db:migrate:up) o (db:rollback db:migrate) dependiendo de la migración especificada

  • db:migrate:reset ejecuta db:drop db:create db:migrate

Para obtener más información, consulte https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (para Rails 3.2.x) y https://github .com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (para Rails 4.0.x)

moritz avatar Apr 24 '2012 16:04 moritz

TLDR

Usar

  • rake db:migrateSi desea realizar cambios en el esquema
  • rake db:resetSi desea eliminar la base de datos, vuelva a cargar el esquema desde schema.rby reinicie la base de datos.
  • rake db:schema:loadSi desea restablecer la base de datos al esquema como se indica en schema.rb(Esto eliminará todos los datos)

Explicaciones

rake db:schema:loadconfigurará el esquema como se proporciona en schema.rbel archivo. Esto es útil para una instalación nueva de la aplicación, ya que no lleva tanto tiempo comodb:migrate

Nota importante: db:schema:loadeliminará los datos del servidor.

rake db:migraterealiza cambios en el esquema existente. Es como crear versiones de esquema. db:migrateBuscará db/migrate/cualquier archivo Ruby y ejecutará las migraciones que aún no se han ejecutado, comenzando por la más antigua. Rails sabe qué archivo es el más antiguo mirando la marca de tiempo al comienzo del nombre del archivo de migración. db:migrateTiene la ventaja de que los datos también se pueden colocar en la base de datos. En realidad, esta no es una buena práctica. Es mejor usarlo rake db:seedpara agregar datos.

rake db:migrateproporciona tareas arriba , abajo , etc., lo que habilita comandos como rake db:rollbacky lo convierte en el comando más útil.

rake db:resethace un db:dropy db:setup
elimina la base de datos, la crea nuevamente, carga el esquema y se inicializa con los datos iniciales.

Parte relevante de los comandos de bases de datos.rake


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
sudo bangbang avatar Apr 07 '2016 07:04 sudo bangbang

Rieles 5

db:create- Crea la base de datos para el entorno RAILS_ENV actual . Si no se especifica RAILS_ENV , el valor predeterminado es las bases de datos de desarrollo y prueba.

db:create:all- Crea la base de datos para todos los entornos.

db:drop- Elimina la base de datos para el entorno RAILS_ENV actual . Si no se especifica RAILS_ENV , el valor predeterminado es las bases de datos de desarrollo y prueba.

db:drop:all- Elimina la base de datos para todos los entornos.

db:migrate- Ejecuta migraciones para el entorno actual que aún no se han ejecutado. De forma predeterminada, ejecutará migraciones solo en el entorno de desarrollo.

db:migrate:redo- Ejecuta db:migrate:down y db:migrate:up o db:migrate:rollback y db:migrate:up dependiendo de la migración especificada.

db:migrate:up- Ejecuta la versión de migración dada.

db:migrate:down- Ejecuta la versión de migración dada.

db:migrate:status- Muestra el estado de migración actual.

db:migrate:rollback- Revierte la última migración.

db:version- Imprime la versión actual del esquema.

db:forward- Empuja el esquema a la siguiente versión.

db:seed- Ejecuta el archivo db/seeds.rb .

db:schema:loadRecrea la base de datos a partir del archivo esquema.rb . Elimina los datos existentes.

db:schema:dumpVuelca el esquema del entorno actual a db/schema.rb .

db:structure:load- Recrea la base de datos a partir del archivo estructura.sql .

db:structure:dump- Vuelca el esquema del entorno actual a db/structure.sql . (Puedes especificar otro archivo con SCHEMA=db/my_structure.sql)

db:setupEjecuta db:create , db:schema:load y db:seed .

db:resetEjecuta db:drop y db:setup . db:migrate:reset- Ejecuta db:drop , db:create y db:migrate .

db:test:prepare- Verifique si hay migraciones pendientes y cargue el esquema de prueba. (Si ejecuta rake sin ningún argumento, lo hará de forma predeterminada).

db:test:clone- Recrear la base de datos de prueba a partir del esquema de base de datos del entorno actual.

db:test:clone_structure- Similar a db:test:clone , pero garantizará que su base de datos de prueba tenga la misma estructura, incluidos conjuntos de caracteres y colaciones, que la base de datos de su entorno actual.

db:environment:set- Establezca el entorno RAILS_ENV actual en la tabla ar_internal_metadata . (Se utiliza como parte de la verificación del entorno protegido).

db:check_protected_environments- Comprueba si se puede realizar una acción destructiva en el entorno RAILS_ENV actual . Se utiliza internamente cuando se ejecuta una acción destructiva como db:drop o db:schema:load .

Ivan Skotsyk avatar May 04 '2020 08:05 Ivan Skotsyk

Listar todas las tareas

Puede encontrar todas las tareas de base de datos que proporciona Rails ejecutando el siguiente comando desde el directorio de una aplicación Rails.

➜  blog (main) ✗ bin/rails help | grep db:

db:create
db:drop
...

Resumen

db:create : Crea la base de datos a menos que ya exista.

db:drop : elimina la base de datos si existe.

db:environment:set : corrige el EnvironmentMismatchErroro NoEnvironmentInSchemaError, que aparece si los datos del entorno no se encuentran en el esquema, configurando el entorno actual en la tabla interna.

db:fixtures:load : Carga los aparatos, es decir, los datos de muestra con los que deseas realizar la prueba. Se almacenan en el archivo YAML en el test/fixtures/directorio.

db:migrate : ejecuta todas las migraciones que aún no se han ejecutado, para el entorno actual.

db:migrate:down : revierte las transformaciones realizadas por el método de la última migración upejecutando el downmétodo.

db:migrate:redo : revierte la base de datos una migración y vuelve a migrar hacia arriba.

db:migrate:status : muestra el estado de las migraciones.

db:migrate:up : ejecuta el upmétodo para una migración determinada.

db:prepare : se ejecuta setupsi la base de datos no existe. De lo contrario, ejecuta las migraciones.

db:reset : restablece su base de datos utilizando sus migraciones para el entorno actual. Lo hace ejecutando db:droplas db:createtareas db:migrate.

db:rollback : revierte el esquema a la versión anterior, deshaciendo la migración que acaba de ejecutar. Si desea deshacer nmigraciones anteriores, pase STEP=na esta tarea.

db:schema:cache:clear : borra el archivo db/schema_cache.yml generado por la db:schema:cache:dumptarea.

db:schema:cache:dump : crea un archivo db/schema_cache.yml.

db:schema:dump : crea un archivo de esquema de base de datos (ya sea db/schema.rbo db/structure.sql, dependiendo de config.active_record.schema_format).

db:schema:load : carga un archivo de esquema de base de datos (ya sea db/schema.rbo db/structure.sql, dependiendo de config.active_record.schema_format) en la base de datos.

db:seed : carga los datos semilla del db/seeds.rbarchivo.

db:seed:replant : trunca las tablas de cada base de datos para el entorno actual y carga las semillas

db:setup : crea todas las bases de datos db:create, carga todos los esquemas db:schema:loade inicializa con los datos iniciales db:seed. Sin embargo, no eliminará primero la base de datos si existe. Úselo db:resetpara eliminar también todas las bases de datos primero.

db:estructura:volcado : en desuso. Se utilizó para volcar el structure.sqlarchivo. db:estructura:carga : en desuso. Se utilizó para cargar el structure.sqlarchivo.

Para conocer un poco de la historia de por qué estas tareas quedaron obsoletas, consulte este wtf . No en serio .

db:system:change : ejecutar rails newel generador sin especificar una base de datos configura su aplicación con sqlite. Es una molestia cambiar la base de datos más tarde. Esta tarea le ayuda a cambiar fácilmente la base de datos delegándola al rails db:change SYSTEM=postgresql|mysql|whatevergenerador.

db:version : Imprime el número de versión del esquema actual.

Fuente: Todas las tareas de bases de datos en Rails

software_writer avatar Dec 09 '2021 04:12 software_writer

Hasta donde tengo entendido, eliminará su base de datos y la volverá a crear en función de su db/schema.rbarchivo. Es por eso que debes asegurarte de que tu schema.rbarchivo esté siempre actualizado y bajo control de versiones.

Simon Bagreev avatar Apr 24 '2012 16:04 Simon Bagreev