Diferencia entre rake db:migrate db:reset y db:schema:load
La diferencia entre rake db:migrate
y rake db:reset
es bastante clara para mí. Lo que no entiendo es en qué rake db:schema:load
se 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 unrake db:drop
+rake db:create
+rake db:migrate
) y ejecuta la migración en una base de datos nueva.
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)
TLDR
Usar
rake db:migrate
Si desea realizar cambios en el esquemarake db:reset
Si desea eliminar la base de datos, vuelva a cargar el esquema desdeschema.rb
y reinicie la base de datos.rake db:schema:load
Si desea restablecer la base de datos al esquema como se indica enschema.rb
(Esto eliminará todos los datos)
Explicaciones
rake db:schema:load
configurará el esquema como se proporciona en schema.rb
el 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:load
eliminará los datos del servidor.
rake db:migrate
realiza cambios en el esquema existente. Es como crear versiones de esquema. db:migrate
Buscará 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:migrate
Tiene 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:seed
para agregar datos.
rake db:migrate
proporciona tareas arriba , abajo , etc., lo que habilita comandos como rake db:rollback
y lo convierte en el comando más útil.
rake db:reset
hace un db:drop
y 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
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:load
Recrea la base de datos a partir del archivo esquema.rb . Elimina los datos existentes.
db:schema:dump
Vuelca 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:setup
Ejecuta db:create , db:schema:load y db:seed .
db:reset
Ejecuta 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 .
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 EnvironmentMismatchError
o 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 up
ejecutando el down
mé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 up
método para una migración determinada.
db:prepare : se ejecuta setup
si 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:drop
las db:create
tareas db:migrate
.
db:rollback : revierte el esquema a la versión anterior, deshaciendo la migración que acaba de ejecutar. Si desea deshacer n
migraciones anteriores, pase STEP=n
a esta tarea.
db:schema:cache:clear : borra el archivo db/schema_cache.yml generado por la db:schema:cache:dump
tarea.
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.rb
o 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.rb
o db/structure.sql
, dependiendo de config.active_record.schema_format
) en la base de datos.
db:seed : carga los datos semilla del db/seeds.rb
archivo.
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:load
e inicializa con los datos iniciales db:seed
. Sin embargo, no eliminará primero la base de datos si existe. Úselo db:reset
para eliminar también todas las bases de datos primero.
db:estructura:volcado : en desuso. Se utilizó para volcar el structure.sql
archivo.
db:estructura:carga : en desuso. Se utilizó para cargar el structure.sql
archivo.
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 new
el 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|whatever
generador.
db:version : Imprime el número de versión del esquema actual.
Fuente: Todas las tareas de bases de datos en Rails
Hasta donde tengo entendido, eliminará su base de datos y la volverá a crear en función de su db/schema.rb
archivo. Es por eso que debes asegurarte de que tu schema.rb
archivo esté siempre actualizado y bajo control de versiones.