Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

276
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda