rails migrations make how create column ruby-on-rails ruby database rake

ruby-on-rails - migrations - rake db:< migrate



Diferencia entre rake db: migrate db: reset y db: schema: load (4)

TLDR

Utilizar

  • rake db:migrate si quieres hacer cambios en el esquema
  • rake db:reset Si desea eliminar la base de datos, vuelva a cargar el esquema desde schema.rb y reinicie la base de datos
  • rake db:schema:load Si desea restablecer la base de datos al esquema como se schema.rb en schema.rb (Esto eliminará todos los datos)

Explicaciones

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

Nota importante, db:schema:load eliminará los datos en el servidor.

rake db:migrate realiza cambios en el esquema existente. Es como crear versiones de esquema. db:migrate buscará en db/migrate/ para cualquier archivo ruby ​​y ejecutará las migraciones que aún no se ejecutan comenzando con la más antigua. Rails sabe qué archivo es el más antiguo al mirar la marca de tiempo al principio del nombre de archivo de migración. db:migrate viene con el beneficio de que los datos también se pueden colocar en la base de datos. Esto no es realmente una buena práctica. Es mejor usar rake db:seed para agregar datos.

rake db:migrate proporciona tareas up , down , etc. que habilitan comandos como rake db:rollback y lo convierten en el comando más útil.

rake db:reset hace un db:drop y db:setup
Elimina la base de datos, la crea de nuevo, carga el esquema y se inicializa con los datos de inicialización.

Parte relevante de los comandos de github.com/rails/rails/blob/master/activerecord/lib/…

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

La diferencia entre rake db:migrate y rake db:reset es bastante clara en mi cabeza. Lo que no entiendo es cómo rake db:schema:load diferente de los dos anteriores.

Solo 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 (probablemente hace un rake db:drop + rake db:create + rake db:migrate ) y ejecuta la migración en una base de datos nueva.

Por favor ayude a aclarar, si mi entendimiento ha ido mal.


Según tengo entendido, se eliminará su base de datos y se volverá a crear en función de su archivo db/schema.rb . Es por eso que necesita asegurarse de que su archivo schema.rb esté siempre actualizado y bajo el control de versiones.


Simplemente puede mirar en las tareas de Rake de registro activo ya que es donde creo que viven como en este archivo. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb

Lo que hacen es tu pregunta ¿verdad?

Eso depende de dónde vienen y esto es justo y un ejemplo para demostrar que varían según la tarea. Aquí tenemos un archivo diferente lleno de tareas.

https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile

que tiene estas tareas.

namespace :db do task create: ["db:mysql:build", "db:postgresql:build"] task drop: ["db:mysql:drop", "db:postgresql:drop"] end

Es posible que esto no responda a su pregunta, pero podría darle una idea de cómo seguir adelante y revisar la fuente, especialmente los archivos y tareas de rake. Como hacen un buen trabajo ayudándote a usar los rieles, no siempre documentan el código tan bien. Todos podríamos ayudar allí si sabemos lo que se supone que debe hacer.


  • db: migrate ejecuta migraciones (únicas) que aún no se han ejecutado.
  • db: create crea la base de datos
  • db: drop borra la base de datos
  • db: schema: load crea tablas y columnas dentro de la base de datos (existente) siguiendo schema.rb

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

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

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

Espero que eso ayude.

ACTUALIZACIÓN para rieles 3.2.12:

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

  • db: create crea la base de datos para el env actual
  • db: create: all crea las bases de datos para todos los envs
  • db: drop cae la base de datos para el env actual
  • db: drop: all cae las bases de datos para todos los envs
  • db: migrate ejecuta migraciones para el env actual que aún no se han ejecutado
  • db: migrate: up ejecuta una migración específica
  • db: migrate: down retrocede una migración específica
  • db: migrate: status muestra el estado actual de la migración
  • db: rollback retrocede la última migración
  • db: forward avanza la versión actual del esquema a la siguiente
  • db: seed (solo) ejecuta el archivo db / seed.rb
  • db: schema: load carga el esquema en la base de datos del env actual
  • db: schema: dump vuelca el esquema del env actual (y parece que también crea la db)

  • db: el programa de instalación ejecuta 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, visite 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)