Despliegue Fallido

Cuando despliegas tu aplicación, puedes experimentar un error durante la fase de construcción o despliegue que provoque que el despliegue falle. Este artículo explica cómo solucionar errores de despliegue específicos; si tu problema persiste después de seguir estos pasos, consulta nuestros pasos generales para la solución de problemas.

Fallo en el Proceso de Construcción — No se ha Detectado Ningún Grupo Buildpack

Al desplegar una aplicación, si hay un problema al detectar el paquete de construcción de tu aplicación durante el proceso de construcción, puede que veas el siguiente error en Detalles del despliegue.

Error en el proceso de construcción
Tipo de fallo de construcción desconocido

Haz clic en el error en Detalles del despliegue para ver el registro del proceso de construcción y busca errores similares a los siguientes:

===> DETECCIÓN
ERROR: No buildpack groups passed detection. (Ningún grupo buildpack ha pasado la detección.)
ERROR: Please check that you are running against the correct path. (Comprueba que estás ejecutando en la ruta correcta.)
ERROR: failed to detect: no buildpacks participating (no se ha detectado: no participan buildpacks)
ERROR: failed to build: executing lifecycle: failed with status code: 20 (no se ha podido compilar: ejecución del ciclo de vida: fallida con código de estado: 20)

Estos errores se producen cuando no hay suficiente información para detectar correctamente el tipo de aplicación. La causa suele ser una de las siguientes:

  • El repositorio Git no contiene todos los archivos necesarios para la aplicación.
  • Algo en el código o en la configuración hace que se seleccione un buildpack incorrecto.
  • La ruta de construcción es incorrecta.

Repositorio Git

Comprueba tu repositorio para asegurarte de que se han introducido en él todos los archivos correctos para tu aplicación.

Buildpack

Si eliges Configurar imagen de contenedor automáticamente al añadir tu aplicación, utilizamos un paquete de buildpack para determinar y configurar automáticamente un contenedor para tu aplicación. Si tu aplicación requiere un buildpack adicional, puedes añadir buildpacks adicionales en la página Configuración de tu aplicación.

Cuando utilices buildpacks, también debes asegurarte de que la versión del lenguaje correcta está en los archivos de tu aplicación. Para más detalles, consulta nuestra documentación sobre cómo especificar una versión del lenguaje para Nixpacks o Buildpacks.

Ruta de Construcción

La ruta de construcción es el lugar del repositorio donde se encuentran los archivos para construir tu aplicación. Normalmente, es la raíz del repositorio, y no tienes que establecer una ruta de construcción al añadir tu aplicación.

Si tu aplicación tiene una ruta de construcción diferente, puedes establecerla cuando añadas la aplicación, o puedes cambiarla en Configuración(Configuración > Editar detalles > Ruta de construcción). Por ejemplo, si tu aplicación debe construirse desde un subdirectorio llamado app, introduce la ruta de ese subdirectorio como /app en el campo Ruta de construcción.

Error de Construcción Debido a que el Proceso Finalizó Demasiado Pronto

Cuando despliegues una aplicación, si hay algún problema con el proceso de construcción, puede que veas el siguiente error:

The build failed because the process exited too early. This probably means the system ran out of memory or someone called kill -9 on the process. (La compilación ha fallado porque el proceso ha finalizado demasiado pronto. Esto probablemente significa que el sistema se quedó sin memoria o que alguien llamó a kill -9 en el proceso.)

Esto suele deberse a que la memoria del sistema de la máquina de construcción es insuficiente para la aplicación.

Para resolver este error, aumenta el tamaño de la máquina de construcción de tu aplicación. Ve a Procesos, haz clic en Actualizar construcción, elige una máquina de compilación mayor y vuelve a hacer clic en Actualizar construcción para confirmar el cambio.

Error de Despliegue

Al desplegar una aplicación, si hay un problema con el despliegue, puedes ver uno de los siguientes errores:

Your application experienced a rollout error. Check our documentation, and if you continue to experience problems, contact our support team. (Tu aplicación ha experimentado un error de despliegue. Consulta nuestra documentación y, si sigues teniendo problemas, ponte en contacto con nuestro equipo de soporte.)

Build process failed (Fallo en el proceso de construcción)
Unknown build fail type (Tipo de fallo de compilación desconocido)

Si el proceso de despliegue falla inmediatamente, o si el proceso de construcción falla, no se crea ningún pod y no existen registros de tiempo de ejecución, la causa más frecuente es un comando de inicio incorrecto en el proceso web (o un ENTRYPOINT incorrecto en el archivo Dockerfile si tu aplicación se construye a partir de un archivo Dockerfile).

Si el proceso de despliegue se ejecuta durante uno o dos minutos y luego falla, suele significar que los pods se crearon, pero algo salió mal y el proceso se detuvo. En este caso, debes comprobar los registros de ejecución de la aplicación para identificar cualquier mensaje de error. Los mensajes de error pueden ayudarte a identificar fallos en el código de la aplicación para que puedas depurar el problema.

Si no puedes identificar el problema, comprueba lo siguiente, y si el problema persiste, ponte en contacto con nuestro equipo de Soporte.

Repositorio Git

Comprueba tu repositorio para asegurarte de que todos los archivos correctos se han introducido en el repositorio de tu aplicación.

Lenguaje

Cuando añades tu aplicación y eliges utilizar Nixpacks o Buildpacks para crear la imagen del contenedor de tu aplicación, determinamos y configuramos automáticamente un contenedor para tu aplicación. Cuando utilices Nixpacks o Buildpacks, si no quieres que se utilice la versión por defecto o la última disponible del lenguaje, debes establecer la versión del lenguaje en los archivos de tu aplicación. Para más detalles, consulta nuestra documentación sobre cómo especificar una versión de lenguaje para Buildpacks o cómo especificar una versión de lenguaje para Nixpacks.

Además, si despliegas una aplicación PHP o Python con Nixpacks y el despliegue falla cuando se construye la imagen del contenedor, lo más probable es que se deba a que falta una versión del lenguaje en el código de la aplicación, sobre todo si el despliegue funciona con Buildpacks pero no con Nixpacks. Comprueba lo siguiente para asegurarte de que la versión del lenguaje está configurada:

PHP

Si hay un archivo composer.json en tu repositorio, debe contener la clave require con la versión de PHP, como la siguiente:

{
  "require": {
    "php": "~8.1.0"
  }
}

Python

Para especificar tu versión de Python, incluye lo siguiente en el archivo runtime.txt de tu aplicación:

python-3.10.13

Comando de Inicio o ENTRYPOINT

El comando de Inicio para el proceso web inicia tu aplicación. Si es incorrecto, la aplicación no se ejecutará. Puedes comprobar el comando en un par de lugares de MyKinsta:

  • Procesos > Procesos en tiempo de ejecución > Proceso web.
  • O Despliegues > Historial, selecciona un despliegue para ver los detalles y, a continuación, haz clic en Proceso de lanzamiento en Progreso del despliegue.
Proceso de lanzamiento satisfactorio en Detalles del despliegue.
Proceso de lanzamiento satisfactorio en Detalles del despliegue.

Si tu aplicación utiliza un Dockerfile para configurar su imagen de contenedor, debes especificar el ENTRYPOINT en el Dockerfile para ejecutar un contenedor. Para más información sobre cómo especificar el ENTRYPOINT de tu aplicación, consulta la referencia Dockerfile.

Para más detalles sobre qué comando utilizar en función del lenguaje de tu aplicación, consulta los ejemplos proporcionados en nuestra documentación Comando de Inicio de la Aplicación.

Ruta de Construcción o Contexto del Dockerfile

Cuando añades tu aplicación, puedes elegir entre configurar la imagen del contenedor automáticamente con un Nixpack o un Buildpack o utilizar un Dockerfile para configurar la imagen del contenedor.

  • Ruta de construcción: Esto sólo se aplica a los Nixpacks y Buildpacks. Es la ruta en el repositorio a los archivos necesarios para construir la aplicación. La mayoría de las aplicaciones se construyen desde la raíz del repositorio, y la Ruta de construcción por defecto es ésta (.). Si tienes una ruta de construcción diferente, especifícala aquí. Por ejemplo, si tu aplicación necesita construirse desde un subdirectorio (por ejemplo, app), introduce la ruta de ese subdirectorio en el campo Ruta de construcción: app. Esto también es útil si tienes un monorepo.
  • Contexto: Esto sólo se aplica a los Dockerfiles. Es la ruta del repositorio a la que necesitamos acceder para poder construir tu aplicación. La mayoría de las aplicaciones se construyen desde la raíz del repositorio, y puedes introducir la raíz del repositorio (.) en el campo Contexto. Si tu aplicación necesita construirse desde un subdirectorio (por ejemplo, app), introduce la ruta de ese subdirectorio en el campo Contexto: app.

Puedes ver y cambiar la Ruta de construcción o el Contexto de Dockerfile en la Configuración de tu aplicación.

Variables de Entorno

Las variables de entorno proporcionan a tu aplicación información externa a la ejecución de esa aplicación. Una variable de entorno incorrecta puede impedir que se ejecute tu aplicación. Puedes comprobar tus variables de entorno en Configuración > Variables de entorno.

Variables de entorno de tu aplicación.
Variables de entorno de tu aplicación.

Confirma que existen las variables de entorno correctas y que contienen valores válidos. Hay algunas cosas importantes que debes tener en cuenta al crear y comprobar las variables de entorno:

  • Cada clave debe ser única, y una clave sólo puede añadirse una vez.
  • Los paréntesis pueden hacer que falle el proceso de construcción o despliegue, dependiendo de cuándo estén disponibles durante el despliegue. No pueden utilizarse en variables de entorno.
  • Las comas no escapadas son interpretadas como delimitadores por el proceso de despliegue, por lo que no pueden utilizarse en variables de entorno. Si necesitas utilizar una coma en el valor de tu variable de entorno, debes escaparla con una barra invertida (\).
  • Las comillas dobles no escapadas no se tendrán en cuenta o harán que falle el proceso de despliegue. Si necesitas utilizar comillas dobles en el valor de tu variable de entorno, debes escaparlas con una barra invertida (\).

Conexiones Internas y el Proceso de Construcción

Las conexiones internas sólo están disponibles durante el tiempo de ejecución; no están disponibles durante el proceso de construcción.

Si tu aplicación intenta conectarse a una base de datos utilizando una conexión interna durante el proceso de construcción, se producirá un error que indicará que la base de datos no se está ejecutando, lo que hará que la construcción falle. Esto es de esperar porque la conexión interna no está activa durante la construcción; sólo puede utilizarse durante el tiempo de ejecución.

Hay un par de formas de evitarlo.

Opción 1: Traslada la lógica que se conecta a la base de datos del comando de construcción de la aplicación al comando de inicio. Por ejemplo: si tienes un comando como prisma migrate en el proceso de construcción y mueves ese comando al comando de inicio, tu aplicación sólo accederá a la base de datos durante el tiempo de ejecución, y la construcción se realizará correctamente.

Opción 2: Añade variables de entorno independientes según sea necesario para la conexión a la base de datos, una disponible para el proceso de construcción y la otra sólo para el tiempo de ejecución. Las claves pueden ser las mismas (por ejemplo, DB_CONNECTION_URL) siempre que una sólo esté disponible durante el proceso de construcción y la otra sólo durante el tiempo de ejecución. Utiliza los detalles de la conexión externa de la base de datos (Bases de datos > nombre de la base de datos > Info > Conexiones externas) para los valores de las variables que se utilizarán en el proceso de construcción.

Puerto

Para el Alojamiento de Aplicaciones, sólo están abiertos los puertos 80 y 443. Si tu aplicación expone algún puerto, debes utilizar el 8080.

Nombre de paquete no válido

Un nombre de paquete no válido en package.json puede causar un error. Por ejemplo, no utilices «js» o «node» en el nombre. Para más detalles, consulta los detalles de la gestión de package.json de npm en la Documentación de npm.

¿Este artículo te ha resultado útil?