J'aimerais pouvoir pousser du code vers dev.myapp.com
pour les tests, puis sur www.myapp.com
pour une utilisation en production. Est-ce possible avec Heroku?
Votre interface avec Heroku est essentiellement une branche Git. Le joyau Heroku fonctionne grâce à son API, mais dans votre référentiel Git, il s'agit simplement d'une nouvelle branche distante.
heroku create yourapp # production
git br -D heroku # delete the default branch
heroku create staging-yourapp # staging
git br -D heroku # delete the default branch
Une fois que vous avez configuré plusieurs applications sur Heroku, vous devriez pouvoir configurer votre référentiel Git comme ceci:
git remote add staging [email protected]:staging-yourapp.git
git Push Origin staging
git remote add production [email protected]:yourapp.git
git Push Origin production
Je travaille habituellement dans une branche "active" et j'utilise Github pour mon maître.
En supposant que c'est le cas pour vous, votre flux de travail de déploiement ressemblerait probablement à quelque chose comme:
git co -b working
# do some work
# Push to github:
git co master
git merge working
git Push
# Push to staging:
git co staging
git merge master
git Push Origin staging
# Push to production
git co production
git merge master
git Push Origin production
Cela explique tout ce que vous devez savoir si vous êtes un débutant comme moi: http://devcenter.heroku.com/articles/multiple-environments
Un élément clé de la question initiale concerne la liaison de l'application de transfert à un sous-domaine (dev.myapp.com) de l'application principale (www.myapp.com). Cela n'a été abordé dans aucune des réponses.
Étape 1: configurer les versions de production ('myapp') et de mise en scène ('staging-myapp') de votre application comme indiqué dans la réponse de Luke Bayes
Étape 2: Dans votre système de gestion de domaine (par exemple GoDaddy):
Create a CNAME record: dev.myapp.com
that points to: proxy.heroku.com
Étape 3: configurer Heroku pour acheminer dev.myapp.com vers staging-myapp:
heroku domains:add dev.myapp.com --app staging-myapp
Une fois que l'enregistrement CNAME a eu le temps de se propager, vous pourrez exécuter votre application de transfert sur dev.myapp.com.
Vous devriez vérifier le heroku_san
Il fait un très bon travail en jonglant avec les environnements sur Heroku.
Les choses sont plus faciles maintenant. Voici comment vous le faites ...
$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging
Cela créera des dépôts distants nommés pour chaque application, que vous pouvez voir dans .git/config
.
Vous pouvez désormais utiliser les commutateurs - app ou - remote pour cibler une application particulière:
$ heroku info --app myapp-staging
$ heroku info --remote staging
Pour Rails apps, Heroku par défaut à l'environnement "production" . Si vous voulez que votre application de mise en scène s'exécute dans un environnement de mise en scène, créez l'environnement dans votre projet et définissez les variables d'environnement correspondantes Rails_ENV et RAKE_ENV sur l'application:
$ heroku config:set RACK_ENV=staging Rails_ENV=staging --remote staging
Si vous avez d'autres variables de configuration, vous devrez également les transmettre pour chaque environnement.
$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc
C'est une énorme douleur, donc j'utilise juste mon snappconfig gem et je cours
$ rake heroku:config:load[myapp-staging]
pour charger les fichiers de configuration YAML de mon projet dans Heroku.
Maintenant, vous poussez simplement vers Heroku comme ceci:
$ git Push staging master
$ git Push production master
et migrer comme ceci:
$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production
(Voir Gestion de plusieurs environnements pour une application | Heroku Dev Center pour plus d'informations et de raccourcis.)