Ruby: Verbeterde versie van Makefile

Deze documentatie maakt deel uit van de Geavanceerde toepassingen-gids. Bekijk de volledige gids hier: Verder gaan met uw Ruby-deployments.

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Ruby cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Ruby cloud hosting oplossing van Stackhero te proberen!

Hieronder staat een verbeterde Makefile die meerdere regels voor veelvoorkomende taken ondersteunt:

  • make dev (of gewoon make): Start de applicatie in ontwikkelingsmodus.
  • make deploy: Deploy de applicatie naar de remote genaamd stackhero (ideaal wanneer u een enkele Stackhero-instantie heeft).
  • make deploy-production: Deploy de applicatie naar de remote genaamd stackhero-production.
  • make deploy-staging: Deploy de applicatie naar de remote genaamd stackhero-staging.

Deze Makefile is ontworpen om gevallen te behandelen waarin code al is gedeployed, waardoor de "Everything up-to-date" fout wordt vermeden.

Kopieer en plak de volgende inhoud in uw nieuwe Makefile:

# Standaardregel om uit te voeren bij het aanroepen van "make" zonder argument
.DEFAULT_GOAL := dev


# Stackhero voor Ruby zal de "run" regel op uw instantie uitvoeren.
# Dit is de opdracht om uit te voeren op zowel productie- als staging-platforms.
run:
  rake assets:precompile
  rake db:migrate RAILS_ENV=production
  RAILS_ENV=production bundle exec puma -C config/puma.rb


# Opdracht om uit te voeren in de ontwikkelomgeving
dev:
  RAILS_ENV=development rails server -b 0.0.0.0


# Regel "deploy" deployt naar de instantie "stackhero".
# Geschikt wanneer u slechts één instantie heeft.
deploy:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main


# Regel "deploy-*" deployt naar de instantie "stackhero-*".
# Bijvoorbeeld, voer "make deploy-production" uit om naar "stackhero-production" te deployen,
# of "make deploy-staging" om naar "stackhero-staging" te deployen.
deploy-%:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main


# Interne deploymentregel. Niet wijzigen.
deploy-script:
  @echo "Deployen van branch \"${DEPLOY_BRANCH}\" naar \"${DEPLOY_REMOTE}\"..."
  @echo

  @if [ -n "$$(git status --porcelain)" ]; then \
    echo "Kan niet deployen omdat er niet-gecommitte wijzigingen zijn:"; \
    echo "\e[0m"; \
    git status -s; \
    echo ""; \
    echo "\e[0;31m"; \
    echo "U kunt deze opdracht gebruiken om de wijzigingen te committen:"; \
    echo "git add -A . && git commit -m \"Uw bericht\""; \
    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 "Niets nieuws om te deployen... Forceer deploy (dit zal een nieuwe commit maken)? (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 "Niets om te deployen!"; \
      exit 1; \
      ;; \
    esac \
  fi

  git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}