Python: 改進版 Makefile
本文件是進階用法指南的一部分。請在此處查看完整指南:深入了解 Python 部署。
👋 歡迎來到 Stackhero 文件!
Stackhero 提供現成的 Python 雲端 解決方案,帶來多種好處,包括:
- 只需一個簡單的
git push,即可在幾秒鐘內 部署您的應用程式。- 使用您自己的域名,並享受 HTTPS 證書的自動配置以增強安全性。
- 享受自動備份、一鍵更新,以及簡單、透明且可預測的定價,讓您高枕無憂。
- 得益於專用的私人 VM,獲得最佳的性能和強大的安全性。
節省時間並簡化您的生活:只需 5 分鐘 即可嘗試 Stackhero 的 Python 雲端託管 解決方案!
以下是一個支持多個規則的改進版 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 "Deploying branch \"${DEPLOY_BRANCH}\" to \"${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 \"Your message\""; \
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}