Python: Patobulinta Makefile versija

Ši dokumentacija yra Išplėstiniai naudojimo būdai vadovo dalis. Visą vadovą rasite čia: Toliau su jūsų Python diegimais.

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti Python cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:

  • Įdiekite savo programą per kelias sekundes su paprastu git push.
  • Naudokite savo domeno vardą ir pasinaudokite automatinės HTTPS sertifikatų konfigūracijos privalumais, kad padidintumėte saugumą.
  • Mėgaukitės ramybe su automatinėmis atsarginėmis kopijomis, vieno paspaudimo atnaujinimais ir paprasta, skaidria bei prognozuojama kainodara.
  • Gaukite optimalią veikimo ir tvirtą saugumo lygį dėka privačios ir dedikuotos VM.

Taupykite laiką ir supaprastinkite savo gyvenimą: išbandyti Stackhero Python cloud hosting sprendimą užtrunka tik 5 minutes!

Žemiau pateikiamas patobulintas Makefile, kuris palaiko kelias taisykles:

  • make dev (arba tiesiog make): Paleidžia programą kūrimo režimu.
  • make deploy: Diegia programą į nuotolinį pavadinimu stackhero. Tai gerai veikia, kai turite vieną Stackhero instanciją.
  • make deploy-production: Diegia programą į nuotolinį pavadinimu stackhero-production.
  • make deploy-staging: Diegia programą į nuotolinį pavadinimu stackhero-staging.

Šis Makefile yra sukurtas tvarkyti situacijas, kai kodas nepasikeitė, išvengiant klaidos "Everything up-to-date".

Nukopijuokite ir įklijuokite šį turinį kaip savo naują Makefile:

# Taisyklė, kuri vykdoma pagal nutylėjimą, kai "make" kviečiamas be argumento
.DEFAULT_GOAL := dev


# Stackhero Python vykdys "run" taisyklę jūsų instancijoje.
# Tai komanda, kurią reikia vykdyti tiek gamybos, tiek staging aplinkose.
run:
  ENV=production gunicorn app:app \
    --error-logfile - \
    -b 0.0.0.0:8080


# Komanda, kurią reikia naudoti kūrimo aplinkoje
dev:
  python app.py


# Taisyklė "deploy" diegti į instanciją "stackhero".
# Tinka, jei turite tik vieną instanciją.
deploy:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main


# "deploy-*" taisyklės diegia į instanciją pavadinimu "stackhero-*".
# Pavyzdžiui, vykdant "make deploy-production" diegiama į "stackhero-production",
# arba "make deploy-staging" diegiama į "stackhero-staging".
deploy-%:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main


# Vidinė diegimo taisyklė. Nemodifikuokite jos.
deploy-script:
  @echo "Diegiama šaka \"${DEPLOY_BRANCH}\" į \"${DEPLOY_REMOTE}\"..."
  @echo

  @if [ -n "$$(git status --porcelain)" ]; then \
    echo "Negalima diegti, nes yra neįsipareigojusių pakeitimų:"; \
    echo "\e[0m"; \
    git status -s; \
    echo ""; \
    echo "\e[0;31m"; \
    echo "Galite naudoti šią komandą pakeitimams įsipareigoti:"; \
    echo "git add -A . && git commit -m \"Jūsų žinutė\""; \
    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 "Nieko naujo diegti... Priverstinis diegimas (tai sukurs naują commit'ą)? (y/N) "; \
    read answer && \
    case $$answer in \
      y|Y|yes|YES) \
      git commit --allow-empty -m "Priverstinis atnaujinimas diegimo tikslu į \"${DEPLOY_REMOTE}\"" ; \
      ;; \
    *) \
      echo "Nieko diegti!"; \
      exit 1; \
      ;; \
    esac \
  fi

  git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}