Ruby: Ulepszona wersja Makefile

Ta dokumentacja jest częścią przewodnika Zaawansowane zastosowania. Pełny przewodnik znajdziesz tutaj: Dalsze kroki w wdrażaniu Ruby.

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Ruby cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania Ruby cloud hosting Stackhero zajmuje tylko 5 minut!

Poniżej znajduje się ulepszony Makefile, który obsługuje wiele reguł dla typowych zadań:

  • make dev (lub po prostu make): Uruchamia aplikację w trybie deweloperskim.
  • make deploy: Wdraża aplikację do zdalnego o nazwie stackhero (idealne, gdy masz jedną instancję Stackhero).
  • make deploy-production: Wdraża aplikację do zdalnego o nazwie stackhero-production.
  • make deploy-staging: Wdraża aplikację do zdalnego o nazwie stackhero-staging.

Ten Makefile jest zaprojektowany do obsługi przypadków, gdy kod został już wdrożony, unikając błędu "Everything up-to-date".

Skopiuj i wklej poniższą zawartość do nowego Makefile:

# Domyślna reguła do wykonania przy wywołaniu "make" bez argumentu
.DEFAULT_GOAL := dev


# Stackhero dla Ruby wykona regułę "run" na twojej instancji.
# To jest komenda do uruchomienia na platformach produkcyjnych i staging.
run:
  rake assets:precompile
  rake db:migrate RAILS_ENV=production
  RAILS_ENV=production bundle exec puma -C config/puma.rb


# Komenda do uruchomienia w środowisku deweloperskim
dev:
  RAILS_ENV=development rails server -b 0.0.0.0


# Reguła "deploy" wdraża na instancję "stackhero".
# Odpowiednia, gdy masz tylko jedną instancję.
deploy:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main


# Reguła "deploy-*" wdraża na instancję "stackhero-*".
# Na przykład, uruchom "make deploy-production", aby wdrożyć na "stackhero-production",
# lub "make deploy-staging", aby wdrożyć na "stackhero-staging".
deploy-%:
  @$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main


# Wewnętrzna reguła wdrażania. Nie modyfikować.
deploy-script:
  @echo "Wdrażanie gałęzi \"${DEPLOY_BRANCH}\" do \"${DEPLOY_REMOTE}\"..."
  @echo

  @if [ -n "$$(git status --porcelain)" ]; then \
    echo "Nie można wdrożyć, ponieważ są niezatwierdzone zmiany:"; \
    echo "\e[0m"; \
    git status -s; \
    echo ""; \
    echo "\e[0;31m"; \
    echo "Możesz użyć tej komendy, aby zatwierdzić zmiany:"; \
    echo "git add -A . && git commit -m \"Twoja wiadomość\""; \
    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 "Nic nowego do wdrożenia... Wymusić wdrożenie (to stworzy nowy 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 "Nic do wdrożenia!"; \
      exit 1; \
      ;; \
    esac \
  fi

  git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}