Ruby: Version améliorée du Makefile
Cette documentation fait partie du guide Usages avancés. Consultez le guide complet ici : Aller plus loin avec vos déploiements Ruby.
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Ruby cloud prête à l'emploi qui offre de nombreux avantages, notamment :
- Déployez votre application en quelques secondes avec un simple
git push.- Utilisez votre propre nom de domaine et profitez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
- Bénéficiez de la sauvegarde automatique, des mises à jour en un clic et d'une tarification simple, transparente et prévisible.
- Profitez d'une performance optimale et d'une sécurité renforcée grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Ruby cloud hosting de Stackhero !
Voici un Makefile amélioré qui propose plusieurs règles pour les tâches courantes :
make dev(ou simplementmake) : Démarre l'application en mode développement.make deploy: Déploie l'application sur le remote nomméstackhero(idéal si vous n'avez qu'une seule instance Stackhero).make deploy-production: Déploie l'application sur le remote nomméstackhero-production.make deploy-staging: Déploie l'application sur le remote nomméstackhero-staging.
Ce
Makefileest conçu pour gérer les cas où le code a déjà été déployé, évitant ainsi l'erreur "Everything up-to-date".
Copiez-collez le contenu suivant dans votre nouveau Makefile :
# Règle exécutée par défaut lors de l'appel à "make" sans argument
.DEFAULT_GOAL := dev
# Stackhero for Ruby exécutera la règle "run" sur votre instance.
# C'est la commande à lancer sur les plateformes production et staging.
run:
rake assets:precompile
rake db:migrate RAILS_ENV=production
RAILS_ENV=production bundle exec puma -C config/puma.rb
# Commande à lancer en environnement de développement
dev:
RAILS_ENV=development rails server -b 0.0.0.0
# La règle "deploy" déploie sur l'instance "stackhero".
# Adaptée si vous n'avez qu'une seule instance.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# La règle "deploy-*" déploie sur l'instance "stackhero-*".
# Par exemple, lancez "make deploy-production" pour déployer sur "stackhero-production",
# ou "make deploy-staging" pour déployer sur "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Règle interne de déploiement. Ne pas modifier.
deploy-script:
@echo "Déploiement de la branche \"${DEPLOY_BRANCH}\" vers \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Impossible de déployer car des modifications ne sont pas commitées :"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Vous pouvez utiliser cette commande pour valider les modifications :"; \
echo "git add -A . && git commit -m \"Votre message\""; \
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 "Rien de nouveau à déployer... Forcer le déploiement (cela créera un nouveau 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 "Rien à déployer !"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}