J'ai un projet qui utilise Serve et dont la version est contrôlée à l'aide de Git. Serve crée un output
dossier avec des fichiers statiques que je souhaite déployer sur Heroku.
Je ne veux pas déployer le projet Serve lui-même car la pile Heroku Cedar ne semble pas trop l'apprécier, mais surtout je veux profiter de l'excellent support d'Heroku pour les sites Web statiques.
Existe-t-il un moyen de déployer un sous-dossier sur une télécommande git? Dois-je créer un référentiel Git dans le output
dossier (cela semble incorrect) et le pousser vers Heroku?
Réponses:
Il existe un moyen encore plus simple via git-subtree . En supposant que vous souhaitiez pousser votre dossier `` sortie '' en tant que racine vers Heroku, vous pouvez faire:
Il semble actuellement que git-subtree soit inclus dans git-core, mais je ne sais pas si cette version de git-core a encore été publiée.
la source
--force
, utilisezgit push heroku `git subtree split --prefix output master`:master --force
. Voir stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Mais cela ne fonctionne pas et revient avec+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. J'ai besoin de ce type de fonctionnalité pour pouvoir revenir ultérieurement à des balises spécifiques. Quelle est la bonne façon de procéder?output
dossier qui était uniquement présent sur madevelop
branche vers laheroku master
branche sans avoir besoin de le spécifierdevelop:master
, donc apparemment il pousse vers la branche cible que vous spécifiez à partir de votre branche actuellement extraite.J'ai commencé avec ce que John Berryman a dit, mais en fait, cela peut être plus simple si vous ne vous souciez pas du tout de l'histoire de heroku git.
Je suppose qu'officiel
git subtree
est la meilleure réponse, mais j'ai eu du mal à faire fonctionner subtree sur mon mac.la source
J'ai eu un problème similaire. Dans mon cas, cela n'a jamais été un problème de tout supprimer dans le référentiel heroku et de le remplacer par ce qui se trouve dans mon sous-répertoire. Si tel est votre cas, vous pouvez utiliser le script bash suivant. Mettez-le simplement dans le répertoire de votre application Rails.
Je suis sûr qu'il existe de nombreuses façons d'améliorer cela - alors n'hésitez pas à me dire comment!
la source
+1
Merci. Cette solution fonctionne très bien si vous ne vous souciez pas des journaux git sur Heroku. On peut modifier le script ci-dessus au cas où il y aurait des dossiers que vous souhaitez ignorer, dans le sous-chemin de l'application à déployer. Par exemple, je ne voulais pas despec
dossier sur heroku. Example Gist+1
mais vous pouvez simplifier en ne tirant pas et en ne fusionnant pas dans heroku master et simplementgit push --force heroku master
Après un long et dur mois à essayer différentes choses et à me faire mordre à chaque fois que j'ai réalisé,
juste parce que Heroku utilise un référentiel git comme mécanisme de déploiement, vous ne devriez pas le traiter comme un référentiel git
ça aurait pu être rsync tout aussi bien, ils sont allés pour git, ne vous laissez pas distraire à cause de ça
si vous le faites, vous vous exposez à toutes sortes de blessures. Toutes les solutions susmentionnées échouent lamentablement quelque part:
bundle deploy
- échec, vous devez regrouper la mise à jour à chaque fois:path
+bundle deploy
-, l'équipe de développement considère l':path
option comme "vous n'utilisez pas Bundler avec cette option de gemme" donc elle ne sera pas groupée pour la production/vendor
lien symbolique dans le développement, et de copier les fichiers pour la productionLa solution
L'application en question a 4 projets dans git root:
Tous les projets ont un
vendor/common
lien symbolique regardant la racine ducommon
moteur. Lors de la compilation du code source pour le déploiement sur heroku, nous devons supprimer le lien symbolique et rsync son code doit être physiquement dans le dossier du fournisseur de chaque hôte séparé.Fonctionne très très bien dans la nature avec un minimum de problèmes (non?) 6 mois maintenant
Voici le script https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Mise à jour 1
@AdamBuczynski, ce n'est jamais aussi simple.
Premièrement, vous aurez toujours au moins un environnement de production et de test - et un tas de clusters spécifiques à une fonction au pire - tout à coup, un dossier doit être mappé à des projets n heroku comme une exigence assez basique et tout doit être organisé d'une manière ou d'une autre pour que le script "sait" quelle source vous souhaitez déployer où,
Deuxièmement, vous voudrez partager du code entre les projets - vient maintenant la
sync_common
partie, les manigances avec des liens symboliques en développement étant remplacées par du code rsynced réel sur Heroku parce que Heroku nécessite une certaine structure de dossiers et un bundler et des rubygems vraiment vraiment vraiment vraiment les choses très moche si vous veulent extraire les fils communs dans une gemmeTroisièmement, vous voudrez brancher CI et cela changera un peu la façon dont les sous-dossiers et git repo doivent être organisés, à la fin, dans le cas d'utilisation le plus simple possible, vous vous retrouverez avec l'essentiel susmentionné.
Dans d'autres projets, j'ai besoin de brancher des versions Java, lors de la vente de logiciels à plusieurs clients, vous devrez filtrer les modules qui seront installés en fonction des exigences d'installation et autres,
Je devrais vraiment envisager d'explorer le regroupement de choses dans un Rakefile ou quelque chose comme ça et tout faire de cette façon ...
la source