Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
Comando de migración de Django colgado en Heroku incluso sin una nueva migración real

Estamos ejecutando nuestra pila en Heroku. Estamos usando Django 2.2 con Postgres 11 DB. Nuestra canalización de compilación (Github Actions) empuja a Heroku ( git push https://git.heroku.com... ) e inmediatamente después ejecuta las migraciones ( heroku run python manage.py migrate --app heroku-app-name ). Todo eso funcionaba con una base de datos de Postgres 9.6 y todavía funciona en nuestro entorno de prueba (Postgres 11). Ahora que la producción está en Postgres 11, el comando de migración de django simplemente está atascado y no produce ningún resultado, incluso así no hay migraciones reales para aplicar.

Las únicas diferencias entre nuestra configuración de producción y nuestra configuración de preparación son un seguidor/esclavo en producción adjunto a la base de datos maestra y la "carga de trabajo de producción".

Para arreglar esa implementación, tengo que ejecutar un

 heroku pg:killall -a heroku-app-name heroku restart -a heroku-app-name

En este punto, la tarea de migraciones en la canalización de compilación falla.

y luego las migraciones se pueden aplicar manualmente sin problemas:

 heroku run python manage.py migrate --app heroku-app-name

Entonces, por alguna razón, el comando de migraciones está "esperando" algo, algún bloqueo de la base de datos o lo que sea, pero no puedo identificarlo. Especialmente extraño para mí es el hecho de que también está atascado donde no se aplican migraciones. ¿Por qué estaría atrapado allí?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Encontramos la solución. En realidad, hay tres cosas que se unen.

  1. Activamos una copia de seguridad de la base de datos antes de ejecutar cualquier migración. Solo lo hacemos en producción y no en la puesta en escena, razón por la cual nuestro entorno de puesta en escena no tuvo problemas mientras que la producción sí.
  2. Una migración de base de datos (aunque parezca que no hay nada que aplicar) en realidad está ejecutando algunos comandos (además de SELECCIONAR, ACTUALIZAR, INSERTAR). Por ejemplo en nuestro caso había un CREAR EXTENSIÓN... SI NO EXISTE siempre se ejecutaba al principio.
  3. Si bien era posible con Postgres 9.6 tener un trabajo de copia de seguridad ejecutándose en paralelo (no sé qué está usando heroku debajo del capó, pero supongo que noraml pg_dump ), el trabajo de copia de seguridad en Postgres 11 (¿y otros?) ahora tiene un Bloqueo más exclusivo en algunas operaciones. Supongo que CREAR EXTENSIÓN ... SI NO EXISTE (incluso si la extensión ya existe) no se puede ejecutar mientras se ejecuta un trabajo de copia de seguridad en paralelo.

(Estoy seguro de que faltan algunas internas de Postgres para explicar esto más correctamente)

Como resultado de estas tres cosas, la base de datos bloquea la operación de migración y espera a que finalice el trabajo de copia de seguridad. He movido el trabajo de copia de seguridad diario a una hora diferente y he reconfigurado nuestra canalización para esperar a que la copia de seguridad "previa a la implementación" finalice primero.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda