ruby on rails - remove - rake db: esquema: carga frente a migraciones
rollback migration rails (7)
Acabo de tropezar 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, debería ejecutar 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 a otras máquinas en producción, incluso cuando limpió sus migraciones.
Aquí la pregunta es muy simple: 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 rake db:schema:load
to call, ¿por qué existen las migraciones?
Si la respuesta a lo anterior es que las migraciones se usan para el control de versiones (un registro gradual de 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, ¿continúan manteniendo su ¿función primaria?
Precaución:
De las respuestas a esta pregunta: rake db:schema:load
eliminará los datos en un servidor de producción, así que tenga cuidado al usarlo.
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, al usar el archivo de esquema (que representa el esquema completo actualizado), vaya a través de la estructura de DB existente y agregue / elimine tablas, columnas, índices según sea necesario.
Para mí, esto sería mucho más sólido, aunque posiblemente un poco más lento.
Las migraciones proporcionan cambios de pasos 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 los despliegues: las migraciones proporcionan esta funcionalidad con un rollback failsafe. Si ejecuta rake db: schema: carga en un servidor de producción, terminará borrando 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 por una sola migración (muy similar a su archivo schema.rb) y actualizar la tabla "schema_migrations" para reflejar este cambio. ¡SEA MUY CUIDADO CUANDO HAGA ESTO! Puede borrar 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. El archivo seed.rb se puede usar para esto o para rake personalizado o para implementar tareas. Al incluir esto en los archivos de migración se mezcla 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.
Las migraciones también le permiten agregar datos a la base de datos. pero db: schema: load solo carga el esquema.
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 una migración.
Ya publiqué como comentario, pero creo que es mejor incluir aquí los comentarios del archivo db / schema.rb:
# 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 el archivo schema.rb ...
rake db:migrate
configura las tablas en la base de datos. Cuando ejecute el comando de migración, buscará en db / migrate / para 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ó en db/schema.rb
en la base de datos.
Puede encontrar más información sobre los comandos de la base de datos de rake aquí .