rake db:esquema:carga vs migraciones


Pregunta muy simple aquí: si las migraciones pueden ser lentas y engorrosas a medida que una aplicación se vuelve más compleja y si tenemos el rake db:schema:load mucho más limpio para llamar, ¿por qué existen las migraciones?

Si la respuesta a lo anterior es que las migraciones se utilizan para el control de versiones (un registro paso a paso de los cambios en la base de datos), a medida que una aplicación se vuelve más compleja y rake db:schema:load se usa más en su lugar, ¿continúan manteniendo su función principal?


Precaución:

De la respuestas a esta pregunta: rake db:schema:load eliminará datos en un servidor de producción, así que tenga cuidado al usarlo.

Author: sscirrus, 2011-05-06

7 answers

Las migraciones proporcionan cambios de paso hacia adelante y hacia atrás a 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 un mecanismo de reversión a prueba de fallos. Si ejecuta rake db: schema: load en un servidor de producción, terminará eliminando todos sus datos de producción. Es un hábito peligroso.

Dicho esto, creo que es una práctica decente "colapsar" ocasionalmente las migraciones. Esto implica eliminar migraciones antiguas y reemplazarlas con una única migración (muy similar a su esquema).archivo rb) y actualizando la tabla" schema_migrations " para reflejar este cambio. ¡TEN MUCHO CUIDADO AL HACER ESTO! Puede eliminar muy fácilmente sus datos de producción si no tiene cuidado.

Como nota al margen, creo firmemente que nunca debe poner la creación de datos en los archivos de migración. Semilla.el archivo rb se puede usar para esto, o tareas personalizadas de rake o deploy. Poner esto en archivos de migración mezcla su especificación de esquema de base de datos con su especificación de datos y puede provocar conflictos al ejecutar archivos de migración.

 184
Author: jesse reiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-06 01:36:55

Me topé con este post, que 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 le ayuda a limpiar sus migraciones cuando lo desee, ya que el esquema tiene toda la información para poner otras máquinas en producción incluso cuando se limpian sus migraciones.

 27
Author: ereslibre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-13 22:11:53

Las migraciones también le permiten agregar datos a la base de datos. pero db: schema: load solo carga el esquema .

 8
Author: Shaunak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-09 15:34:51

Porque las migraciones se pueden revertir y proporcionar funcionalidad adicional. Por ejemplo, si necesita modificar algunos datos como parte de un cambio de esquema, deberá hacerlo como migración.

 5
Author: Jamie Penney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-05 23:42:24

Como usuario de otros OR, siempre me pareció extraño que Rails no tuviera una función de 'sincronización y actualización'. es decir, utilizando el archivo de esquema (que representa todo el esquema actualizado), vaya a través de la estructura de la 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 un poco más lento.

 4
Author: Dan James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-26 11:40:45

Ya he publicado como un comentario, pero siente que es mejor poner los comentarios de la base de datos/esquema.archivo rb aquí:

# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

En realidad, mi experiencia es que es mejor poner los archivos de migración en git y no en el esquema.archivo rb...

 0
Author: user1251840,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-31 12:50:28

rake db:migrate configure las tablas en la base de datos. Cuando ejecute el comando migration, buscará en db / migrate / cualquier archivo ruby y los ejecutará comenzando por el más antiguo. Hay una marca de tiempo al principio 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 ha generado en db/schema.rb en la base de datos.

Puede encontrar más información sobre los comandos de base de datos rake aquí.

 0
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 14:15:45