La diferencia entre rake db:migratey rake db:resetes bastante clara en mi cabeza. Lo que no entiendo es cuán rake db:schema:loaddiferente de los dos anteriores.
Solo para asegurarme 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 nueva base de datos.
Por favor, ayuda a aclarar, si mi comprensión ha salido mal.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
fuente
fuente

rake --tasksayuda?rake db:migratees correcta, pero su comprensión derake db:resetes incorrecta. Vea la respuesta más importante, de Moritz.rails db:migrate,rails db:reset,rails db:schema:load. Ver stackoverflow.com/questions/38403533/…Respuestas:
db: schema: load crea tablas y columnas dentro de la base de datos (existente) después de schema.rb
db: setup hace db: create, db: esquema: carga, db: semilla
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 comprobar la fuente y las dependencias son así ahora:
db: schema: dump vuelca el esquema actual de env (y parece crear el db también)
db: la instalación se ejecuta db: esquema: carga, db: semilla
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 / database.rake (para Rails 4.0.x)
fuente
db:createsi es necesario. Al menos a partir de los carriles 4.0.2.rake db:migrateal llamarrake db:setupsi hay migraciones pendientes pero no ejecutarán migraciones pendientes.TLDR
Utilizar
rake db:migrateSi quieres hacer cambios al esquemarake db:resetSi desea descartar la base de datos, vuelva a cargar el esquemaschema.rby vuelva a iniciar la base de datosrake db:schema:loadSi desea restablecer la base de datos al esquema según lo dispuesto enschema.rb(Esto eliminará todos los datos)Explicaciones
rake db:schema:loadconfigurará el esquema según lo dispuesto en elschema.rbarchivo. Esto es útil para una nueva instalación de la aplicación, ya que no lleva tanto tiempo comodb:migraterake 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 ejecutan comenzando por la más antigua. Rails sabe qué archivo es el más antiguo al observar la marca de tiempo al comienzo del nombre de archivo de migración.db:migrateviene con un beneficio de que los datos también se pueden poner en la base de datos. Esto en realidad no es una buena práctica. Es mejor usarrake db:seedpara agregar datos.rake db:migrateproporciona tareas hacia arriba , hacia abajo , etc., lo que permite comandos comorake db:rollbacky lo convierte en el comando más útil.rake db:resethace unadb:dropydb:setupcae la base de datos, crear de nuevo, el esquema de cargas, e inicializa con los datos de semillas
Parte relevante de los comandos de bases de datos.rake
fuente
Según tengo entendido, va a soltar su base de datos y volver a crearla en función de su
db/schema.rbarchivo. Es por eso que debe asegurarse de que suschema.rbarchivo esté siempre actualizado y bajo control de versión.fuente
Simplemente puede mirar en las tareas Active Record Rake, 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 provienen y esto es solo un ejemplo para mostrar 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.
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 rastrillo. Como hacen un trabajo bastante bueno al ayudarlo a usar rieles, no siempre documentan bien el código. Todos podríamos ayudar allí si sabemos lo que se supone que debe hacer.
fuente
ACTUALIZADO para Rails 5:
db:create- Crea la base de datos para el entorno RAILS_ENV actual . Si RAILS_ENV no se especifica, el valor predeterminado es el desarrollo y las bases de datos de prueba.db:create:all- Crea la base de datos para todos los entornos.db:drop- Descarta la base de datos para el entorno RAILS_ENV actual . Si RAILS_ENV no se especifica, el valor predeterminado es el desarrollo y las bases de datos de prueba.db:drop:all- Descarta la base de datos para todos los entornos.db:migrate- Ejecuta migraciones para el entorno actual que aún no se han ejecutado. Por defecto, 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 según la migración especificada.db:migrate:up- Ejecuta la versión de migración dada.db:migrate:down- Ejecuta el down para la VERSIÓN de migración dada.db:migrate:status- Muestra el estado actual de la migración.db:migrate:rollback- Retrocede la última migración.db:version- Imprime la versión actual del esquema.db:forward- Empuja el esquema a la próxima versión.db:seed- Ejecuta el archivo db / seeds.rb .db:schema:loadRecrea la base de datos del archivo schema.rb .db:schema:dumpVuelca el esquema del entorno actual en db / schema.rb .db:structure:load- Recrea la base de datos del archivo structure.sql .db:structure:dump- Volca el esquema del entorno actual a db / structure.sql . (Puede especificar otro archivo conSCHEMA=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- Compruebe 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- Recree la base de datos de prueba del esquema de base de datos del entorno actual.db:test:clone_structure- Similar a db: test: clone , pero se asegurará de que su base de datos de prueba tenga la misma estructura, incluidos charsets y colaciones, que la base de datos de su entorno actual.db:environment:set- Establecer el entorno RAILS_ENV actual en ar_internal_metadata tabla . (Utilizado 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 usa internamente cuando se ejecuta una acción destructiva como db: drop o db: schema: load .fuente