La diferencia entre rake db:migrate
y rake db:reset
es bastante clara en mi cabeza. Lo que no entiendo es cuán rake db:schema:load
diferente 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 --tasks
ayuda?rake db:migrate
es correcta, pero su comprensión derake db:reset
es 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:create
si es necesario. Al menos a partir de los carriles 4.0.2.rake db:migrate
al llamarrake db:setup
si hay migraciones pendientes pero no ejecutarán migraciones pendientes.TLDR
Utilizar
rake db:migrate
Si quieres hacer cambios al esquemarake db:reset
Si desea descartar la base de datos, vuelva a cargar el esquemaschema.rb
y vuelva a iniciar la base de datosrake db:schema:load
Si desea restablecer la base de datos al esquema según lo dispuesto enschema.rb
(Esto eliminará todos los datos)Explicaciones
rake db:schema:load
configurará el esquema según lo dispuesto en elschema.rb
archivo. Esto es útil para una nueva instalación de la aplicación, ya que no lleva tanto tiempo comodb:migrate
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 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:migrate
viene 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:seed
para agregar datos.rake db:migrate
proporciona tareas hacia arriba , hacia abajo , etc., lo que permite comandos comorake db:rollback
y lo convierte en el comando más útil.rake db:reset
hace unadb:drop
ydb:setup
cae 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.rb
archivo. Es por eso que debe asegurarse de que suschema.rb
archivo 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:load
Recrea la base de datos del archivo schema.rb .db:schema:dump
Vuelca 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: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
- 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