Ruby: Patobulinta Makefile versija

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

👋 Sveiki atvykę į Stackhero dokumentaciją!

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

  • Įdiekite savo programą per kelias sekundes su paprastu git push.
  • Naudokite savo domeno vardą ir pasinaudokite automatiniu HTTPS sertifikatų konfigūravimu, 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ą saugumą dėka privačios ir dedikuotos VM.

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

Žemiau pateikiamas patobulintas Makefile, kuris apima kelias taisykles bendroms užduotims:

  • make dev (arba tiesiog make): Paleidžia programą vystymo režimu.
  • make deploy: Diegia programą į nuotolinį pavadinimu stackhero (idealu, 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 atvejus, kai kodas jau buvo diegtas, išvengiant "Everything up-to-date" klaidos.

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

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


# Stackhero Ruby vykdys "run" taisyklę jūsų instancijoje.
# Tai komanda, kurią reikia vykdyti tiek gamybos, tiek staging platformose.
run:
  rake assets:precompile
  rake db:migrate RAILS_ENV=production
  RAILS_ENV=production bundle exec puma -C config/puma.rb


# Komanda, kurią reikia vykdyti vystymo aplinkoje
dev:
  RAILS_ENV=development rails server -b 0.0.0.0


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


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


# Vidinė diegimo taisyklė. Nemodifikuoti.
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ą įsipareigoti pakeitimus:"; \
    echo "git add -A . && git commit -m \"Jūsų pranešimas\""; \
    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... Priversti diegti (tai sukurs naują 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 "Nieko diegti!"; \
      exit 1; \
      ;; \
    esac \
  fi

  git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}