Python: 改进版 Makefile
本文档属于高级用法指南的一部分。您可以在此处查看完整指南:深入了解您的 Python 部署。
👋 欢迎查阅 Stackhero 文档!
Stackhero 提供即开即用的 Python 云服务 方案,助您高效简化部署流程:
- 只需一次简单的
git push,即可在几秒钟内将您的应用部署到生产环境。- 支持自定义域名,自动配置 HTTPS 证书,安全连接全程托管,无需手动操作。
- 提供自动备份、一键升级和可预测的定价,让您专注于代码开发,无需担心基础设施管理。
- 依托私有专属基础设施,为您带来强劲的性能与安全保障。您的环境完全隔离且受到保护。
节省时间,简化工作流程:通过 Stackhero 的 Python 云主机,您的代码最快只需 5 分钟即可上线运行。
以下是一个支持多规则的改进版 Makefile:
make dev(或简单地make):以开发模式启动应用程序。make deploy:将应用程序部署到名为stackhero的远程。这在您只有一个 Stackhero 实例时效果很好。make deploy-production:将应用程序部署到名为stackhero-production的远程。make deploy-staging:将应用程序部署到名为stackhero-staging的远程。
此
Makefile旨在处理代码未更改的情况,避免 "Everything up-to-date" 错误。
复制并粘贴以下内容作为您的新 Makefile:
# 默认执行规则,当调用 "make" 时不带参数
.DEFAULT_GOAL := dev
# Stackhero for Python 将在您的实例上执行 "run" 规则。
# 这是在您的生产和 staging 环境中运行的命令。
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# 在开发环境中使用的命令
dev:
python app.py
# "deploy" 规则用于部署到 "stackhero" 实例。
# 适用于只有一个实例的情况。
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# "deploy-*" 规则部署到名为 "stackhero-*" 的实例。
# 例如,运行 "make deploy-production" 部署到 "stackhero-production",
# 或 "make deploy-staging" 部署到 "stackhero-staging"。
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# 内部部署规则。请勿修改。
deploy-script:
@echo "正在将分支 \"${DEPLOY_BRANCH}\" 部署到 \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "无法部署,因为有未提交的更改:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "您可以使用此命令提交更改:"; \
echo "git add -A . && git commit -m \"您的消息\""; \
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 "没有新内容可部署... 强制部署(这将创建一个新提交)? (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 "没有内容可部署!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}