Python: Versión mejorada del Makefile
Esta documentación forma parte de la guía Usos avanzados. Consulte la guía completa aquí: Avanzando con tus despliegues de Python.
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución nube de Python lista para usar que proporciona una serie de beneficios, incluyendo:
- Despliegue su aplicación en segundos con un simple
git push.- Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
- Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
- Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.
Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de alojamiento en la nube de Python de Stackhero.
A continuación se muestra un Makefile mejorado que admite múltiples reglas:
make dev(o simplementemake): Inicia la aplicación en modo desarrollo.make deploy: Despliega la aplicación en el remoto llamadostackhero. Esto funciona bien cuando tienes una sola instancia de Stackhero.make deploy-production: Despliega la aplicación en el remoto llamadostackhero-production.make deploy-staging: Despliega la aplicación en el remoto llamadostackhero-staging.
Este
Makefileestá diseñado para manejar situaciones donde el código no ha cambiado evitando el error "Everything up-to-date".
Copia y pega el siguiente contenido como tu nuevo Makefile:
# Regla a ejecutar por defecto al invocar "make" sin argumento
.DEFAULT_GOAL := dev
# Stackhero para Python ejecutará la regla "run" en tu instancia.
# Este es el comando para ejecutar en tus entornos de producción y staging.
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# El comando a usar en el entorno de desarrollo
dev:
python app.py
# Regla "deploy" para desplegar en la instancia "stackhero".
# Adecuado si solo tienes una instancia.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# Las reglas "deploy-*" despliegan en una instancia llamada "stackhero-*".
# Por ejemplo, ejecutar "make deploy-production" despliega en "stackhero-production",
# o "make deploy-staging" despliega en "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Regla de despliegue interna. No la modifiques.
deploy-script:
@echo "Desplegando la rama \"${DEPLOY_BRANCH}\" a \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "No se puede desplegar porque hay cambios no confirmados:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Puedes usar este comando para confirmar los cambios:"; \
echo "git add -A . && git commit -m \"Tu mensaje\""; \
echo "\e[0m"; \
exit 1; \
fi
@git push --dry-run ${DEPLOY_REMOTE} ${DEPLOY_BRANCH} 2>&1 | grep -q -F "Everything up-to-date"; \
EXIT_CODE=$$?; \
if [ $$EXIT_CODE -eq 0 ]; then \
echo -n "Nada nuevo que desplegar... ¿Forzar el despliegue (esto creará un nuevo commit)? (y/N) "; \
read answer && \
case $$answer in \
y|Y|yes|YES) \
git commit --allow-empty -m "Force update for deploy purpose to \"${DEPLOY_REMOTE}\"" ; \
;; \
*) \
echo "¡Nada que desplegar!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}