Una pregunta muy simple aquí: si las migraciones pueden volverse lentas y engorrosas a medida que una aplicación se vuelve más compleja y si tenemos mucho más limpio rake db:schema:load
para llamar, ¿por qué existen las migraciones?
Si la respuesta a lo anterior es que las migraciones se usan para el control de versiones (un registro paso a paso de los cambios en la base de datos), entonces, a medida que una aplicación se vuelve más compleja y rake db:schema:load
se usa más, ¿continúan manteniendo su función principal?
Precaución:
De las respuestas a esta pregunta: rake db:schema:load
eliminará datos en un servidor de producción, así que tenga cuidado al usarlo.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
fuente
fuente
Respuestas:
Las migraciones proporcionan cambios de pasos hacia adelante y hacia atrás en la base de datos. En un entorno de producción, se deben realizar cambios incrementales en la base de datos durante las implementaciones: las migraciones proporcionan esta funcionalidad con una reversión a prueba de fallas. Si ejecuta
rake db:schema:load
en un servidor de producción, terminará eliminando todos sus datos de producción. Este es un hábito peligroso para entrar.Dicho esto, creo que es una práctica decente ocasionalmente "colapsar" las migraciones. Esto implica eliminar migraciones antiguas, reemplazarlas con una única migración (muy similar a su
schema.rb
archivo) y actualizar laschema_migrations
tabla para reflejar este cambio. ¡Ten mucho cuidado al hacer esto! Puede eliminar fácilmente sus datos de producción si no tiene cuidado.Como nota al margen, creo firmemente que nunca debe incluir la creación de datos en los archivos de migración. El
seed.rb
archivo se puede utilizar para esto, o para rakear o desplegar tareas personalizadas. Poner esto en los archivos de migración combina la especificación del esquema de la base de datos con la especificación de datos y puede generar conflictos al ejecutar los archivos de migración.fuente
db:schema:load
si intentan ejecutardb:migrate
una instalación nueva. @ clear_migrationsMe topé con esta publicación, eso fue hace mucho tiempo y no vi la respuesta que esperaba.
rake db:schema:load
es genial por primera vez que pones un sistema en producción. Después de eso, debe ejecutar las migraciones normalmente.Esto también lo ayuda a limpiar sus migraciones cuando lo desee, ya que el esquema tiene toda la información para poner en producción otras máquinas, incluso cuando limpió sus migraciones.
fuente
db:schema:load
tiene aparte de afeitarse unos segundos una vez durante el ciclo de desarrollo. ¿Alguna vez trabajó con una aplicación que tardó más de 30 segundos en crearse? Actualmente estoy trabajando en una aplicación que tiene errores en sus archivos de migración y nunca migrará sin tener correcciones de errores o ejecutarse,db:schema:load
lo que me hace pensar en el esquema: la carga es para cuando algo salió mal con respecto al desarrollo de la aplicación.instead of editing schema.rb, please use the migrations feature
. Por lo tanto, si está ejecutandodb:schema:load
en un archivo generado automáticamente que no tiene migraciones para generar automáticamente nuevamente, efectivamente está siguiendo la ruta de "editar" manualmente el esquema y deshabilitar las migraciones. Desearía tener una cita de la guía de rieles sobre esto, pero no discuten el esquema: carga, lo que se suma a mi frustración al decidir cómo abordar el esquema: función de carga. = /rake db:schema:load
en lugar derake db:migrate
. Luego, a partir de ahí, puedesrake db:migrate
.Las migraciones también le permiten agregar datos a la base de datos. pero db: schema: load solo carga el esquema.
fuente
Porque las migraciones se pueden revertir y proporcionan una funcionalidad adicional. Por ejemplo, si necesita modificar algunos datos como parte de un cambio de esquema, deberá hacerlo como migración.
fuente
Como usuario de otros ORM, siempre me pareció extraño que Rails no tuviera una función de 'sincronización y actualización'. es decir, mediante el uso del archivo de esquema (que representa el esquema completo y actualizado), revise la estructura de base de datos existente y agregue / elimine tablas, columnas e índices según sea necesario.
Para mí, esto sería mucho más robusto, aunque posiblemente sea un poco más lento.
fuente
schema
es el maestro, no las migraciones.Ya publiqué como comentario, pero siento que es mejor poner los comentarios del archivo db / schema.rb aquí:
En realidad, mi experiencia es que es mejor poner los archivos de migración en git y no el archivo schema.rb ...
fuente
rake db:migrate
configurar las tablas en la base de datos. Cuando ejecuta el comando de migración, buscará en db / migrate / cualquier archivo ruby y los ejecutará comenzando por el más antiguo. Hay una marca de tiempo al comienzo de cada nombre de archivo de migración.A diferencia de
rake db:migrate
que ejecuta migraciones que aún no se han ejecutado,rake db:schema:load
carga el esquema que ya se generó endb/schema.rb
la base de datos.Puede encontrar más información sobre los comandos de la base de datos de rastrillo aquí .
fuente