window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Gestión de la estructura de la base de datos en varias sucursales - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2016-07-09
Desarrollo de software

Gestión de la estructura de la base de datos en varias sucursales

Tomasz Kowalewski

Desarrollar una aplicación no sólo significa implementar nuevas funciones o parchearla. A veces hay que revertir los cambios y volver a la fase anterior de un proyecto. Un problema frecuente que puede surgir mientras se trabaja en varias ramas está relacionado con el mantenimiento de la versión adecuada de una estructura de base de datos. Los programadores que utilizan rails tienen a su disposición soluciones ya preparadas. Estas soluciones soportan la implementación y el control de los cambios en la base de datos: son las migraciones. No voy a describir cómo funciona y qué posibilidades ofrece - me gustaría centrarme en el problema de mantener la versión adecuada de una estructura de base de datos mientras se cambia de rama.

La capa de base de datos de una aplicación es un ente independiente y sólo se controla mediante migraciones. Al crear nuevas migraciones, recuerde hacer reversible la transformación prevista de una estructura de base de datos. Por supuesto, en casos extremos, podemos plantear MigraciónIrreversible en el abajo método. Esto también nos informará del hecho de que la migración no se puede revertir. Hay diferentes tipos de cambios que realizamos en la migración: crear, modificar y eliminar tablas, columnas o índices. Las operaciones de eliminación y modificación son las más sensibles a los cambios. ¿Por qué? Consideremos el siguiente escenario: Estamos trabajando con la rama maestra, que es nuestra ruta de trabajo principal. Actualmente tenemos una tabla:

 class CrearArtículos < ActiveRecord::Migración
   def change
     crear_tabla :artículos do |t|
       t.cadena :nombre
       t.text :descripción
       t.cadena :estado, null: false
       t.timestamps null: false
     end
   end
 end

Nuestra Artículo tiene tales validaciones que requieren la presencia de nombre, descripción y estado atributos.

 class Artículo < ActiveRecord::Base
   valida :nombre, presencia: true
   valida :descripción, presencia: true
   valida :estado, presencia: true
 end

Estamos introduciendo cambios en artículos mesa en función rama de desarrollo y eliminamos la estado columna.

 class EliminarColumnaDeEstadoDeArtículos < ActiveRecord::Migration
   def change
     remove_column :articles, :status, :string
   end
 end

Ejecutamos la migración:

 $ [example/feature]: bundle exec rake db:migrate
 == 20150605120955 RemoveStatusColumnFromArticles: migrando ===================
 -- remove_column(:articles, :status, :string)
   -> 0.0717s
 == 20150605120955 RemoveStatusColumnFromArticles: migrado (0.0718s) ==========

El esquema de una base de datos cambia:

diff --git a/db/schema.rb b/db/schema.rb
index 2a100a9..76438c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,13 @@ #

Se recomienda encarecidamente que compruebe este archivo en su sistema de control de versiones.

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(versión: 20150605120955) do
  createtable "articles", force: :cascade do |t|
    t.cadena "nombre"
    t.text "descripción"
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "updated_at", null: false
  fin

end

A continuación, confirmamos los cambios en el archivo función rama. Para simular este problema cambiamos la rama actual a master. La estructura base ha sido modificada por la migración, que elimina la rama estado en la columna función rama. Intentemos utilizar el siguiente comando:

Article.create!(nombre: "Kaboom", descripción: "Lorem ipsum...", estado: "activo")

¿Qué ocurrirá después de ejecutar las código? El error: ActiveRecord::UnknownAttributeError: atributo desconocido 'status' para Article y eso es debido a la incompatibilidad de la estructura de la versión de la base de datos. Antes de cambiar la rama a master debemos revertir la migración que borra el archivo estado de la columna Artículo mesa.

¿Qué podemos hacer para comprobar si tenemos que deshacer algunas migraciones antes de cambiar las ramas? Con el uso del sistema de control de versiones (aquí es git) podemos comprobar nuestro trabajo creando un alias útil:

~/.gitconfig
 [alias]
  migrations = "!f() { git diff --name-only $1..$2 db/migrate | tr -d '[A-Za-z/_.]'; }; f"

Ejecución de la git migrations master feature obtendrá la lista de versiones de migración, que se encuentran en función ramas, y que no pueden encontrarse en maestro.

 $ [ejemplo/característica]: git migrations master feature.
 20150605120955

Gracias a esta información podemos revertir fácilmente los cambios realizados en la estructura de la base de datos antes de pasar a maestra.

 $ [example/feature]: bundle exec rake db:migrate:down VERSION=20150605120955
 == 20150605120955 RemoveStatusColumnFromArticles: revirtiendo ===================
 -- add_column(:articles, :status, :string)
   -> 0.0009s
 == 20150605120955 RemoveStatusColumnFromArticles: revertido (0.0045s) ==========

Una cosa más que debemos hacer después de hacer retroceder la migración es restaurar el estado de un esquema de base de datos.

$ [ejemplo/característica]: git status
En la rama característica
Cambios no preparados para confirmar:
 (usa "git add ..." para actualizar lo que se confirmará)
 (usa "git checkout -- ..." para descartar los cambios en el directorio de trabajo)

modificado: db/schema.rb

no se han añadido cambios al commit (usa "git add" y/o "git commit -a")
$ [ejemplo/característica]: git checkout db/esquema.rb
$ [ejemplo/característica]: git status
En la rama característica
nada que confirmar, directorio de trabajo limpio

Ahora podemos cambiar fácilmente al maestro rama.

El ejemplo dado no es un problema complicado de resolver, pero debería ayudarle a darse cuenta de lo importante que es mantener la estructura de una base de datos durante el cambio en el contexto de trabajo.

Artículos relacionados

Desarrollo de software

Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

EL MEJOR
Desarrollo de software

Las 10 mejores empresas de desarrollo de software de Letonia

Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

thecodest
Soluciones para empresas y escalas

Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

thecodest
Desarrollo de software

La guía definitiva para subcontratar en Polonia

El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

TheCodest
Soluciones para empresas y escalas

Guía completa de herramientas y técnicas de auditoría informática

Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

The Codest
Jakub Jakubowicz CTO y Cofundador

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

    es_ESSpanish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish