Python: Versão melhorada do Makefile
Esta documentação faz parte do guia Usos avançados. Consulte o guia completo aqui: Avançar com as suas implementações Python.
👋 Bem-vindo à documentação do Stackhero!
Stackhero oferece uma solução cloud Python pronta a usar que proporciona uma série de benefícios, incluindo:
- Implemente a sua aplicação em segundos com um simples
git push.- Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
- Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e preços simples, transparentes e previsíveis.
- Obtenha performance ótima e segurança robusta graças a uma VM privada e dedicada.
Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de hospedagem cloud Python do Stackhero!
Abaixo está um Makefile melhorado que suporta múltiplas regras:
make dev(ou simplesmentemake): Inicia a aplicação em modo de desenvolvimento.make deploy: Implementa a aplicação no remoto chamadostackhero. Isto funciona bem quando tem uma única instância Stackhero.make deploy-production: Implementa a aplicação no remoto chamadostackhero-production.make deploy-staging: Implementa a aplicação no remoto chamadostackhero-staging.
Este
Makefileé projetado para lidar com situações onde o código não mudou, evitando o erro "Everything up-to-date".
Copie e cole o seguinte conteúdo como o seu novo Makefile:
# Regra a executar por padrão ao invocar "make" sem argumento
.DEFAULT_GOAL := dev
# Stackhero para Python executará a regra "run" na sua instância.
# Este é o comando a executar nos seus ambientes de produção e staging.
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# O comando a usar no ambiente de desenvolvimento
dev:
python app.py
# Regra "deploy" para implementar na instância "stackhero".
# Adequado se tiver apenas uma instância.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# As regras "deploy-*" implementam numa instância chamada "stackhero-*".
# Por exemplo, executar "make deploy-production" implementa em "stackhero-production",
# ou "make deploy-staging" implementa em "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Regra de implementação interna. Não a modifique.
deploy-script:
@echo "Implementando o ramo \"${DEPLOY_BRANCH}\" para \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Não é possível implementar porque há alterações não confirmadas:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Pode usar este comando para confirmar as alterações:"; \
echo "git add -A . && git commit -m \"Sua mensagem\""; \
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 novo para implementar... Forçar implementação (isto criará um novo 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 para implementar!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}