Ruby: Versione migliorata del Makefile
Questa documentazione fa parte della guida Utilizzi avanzati. Consulta la guida completa qui: Approfondire i tuoi deployment Ruby.
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione Ruby cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:
- Distribuisci la tua applicazione in pochi secondi con un semplice
git push.- Usa il tuo nome di dominio e beneficia della configurazione automatica dei certificati HTTPS per una sicurezza potenziata.
- Goditi la tranquillità con backup automatici, aggiornamenti con un clic, e una tariffazione semplice, trasparente e prevedibile.
- Ottieni prestazioni ottimali e una sicurezza robusta grazie a una VM privata e dedicata.
Risparmia tempo e semplificati la vita: bastano solo 5 minuti per provare la soluzione Ruby cloud hosting di Stackhero!
Di seguito è riportato un Makefile migliorato che supporta più regole per attività comuni:
make dev(o semplicementemake): Avvia l'applicazione in modalità sviluppo.make deploy: Distribuisce l'applicazione sul remoto chiamatostackhero(ideale quando hai una sola istanza Stackhero).make deploy-production: Distribuisce l'applicazione sul remoto chiamatostackhero-production.make deploy-staging: Distribuisce l'applicazione sul remoto chiamatostackhero-staging.
Questo
Makefileè progettato per gestire i casi in cui il codice è già stato distribuito, evitando l'errore "Everything up-to-date".
Copia e incolla il seguente contenuto nel tuo nuovo Makefile:
# Regola da eseguire di default quando si invoca "make" senza argomento
.DEFAULT_GOAL := dev
# Stackhero per Ruby eseguirà la regola "run" sulla tua istanza.
# Questo è il comando da eseguire sulle piattaforme di produzione e staging.
run:
rake assets:precompile
rake db:migrate RAILS_ENV=production
RAILS_ENV=production bundle exec puma -C config/puma.rb
# Comando da eseguire nell'ambiente di sviluppo
dev:
RAILS_ENV=development rails server -b 0.0.0.0
# La regola "deploy" distribuisce sull'istanza "stackhero".
# Adatto quando hai solo un'istanza.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# La regola "deploy-*" distribuisce sull'istanza "stackhero-*".
# Ad esempio, esegui "make deploy-production" per distribuire su "stackhero-production",
# o "make deploy-staging" per distribuire su "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Regola di deployment interna. Non modificare.
deploy-script:
@echo "Distribuzione del branch \"${DEPLOY_BRANCH}\" su \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Impossibile distribuire perché ci sono modifiche non commesse:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Puoi usare questo comando per commettere le modifiche:"; \
echo "git add -A . && git commit -m \"Il tuo messaggio\""; \
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 "Niente di nuovo da distribuire... Forzare la distribuzione (questo creerà un nuovo 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 "Niente da distribuire!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}