web-dev-qa-db-fra.com

Instance de mise en scène sur Heroku

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?

85
Tom Lehman

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
142
Luke Bayes

Cela explique tout ce que vous devez savoir si vous êtes un débutant comme moi: http://devcenter.heroku.com/articles/multiple-environments

19
LearningRoR

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.

10
Don Leatham

Vous devriez vérifier le heroku_san

Il fait un très bon travail en jonglant avec les environnements sur Heroku.

8
jlfenaux

Les choses sont plus faciles maintenant. Voici comment vous le faites ...

Créez une application pour chaque environnement

$ 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

Définir Rails environnements

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

Configurer les environnements

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.

Déployer

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.)

7
Yarin