Spidou Logiciels libres, Ubuntu, Rails…

25Nov/112

Déployer une application Rails 3.1 sur Heroku (Cedar)

Dans un précédent billet, j'expliquais Comment déployer une application Rails 2.X sur Heroku.

Le temps passe et les outils ont évolué, une petite mise à jour s'impose donc !

Voyons ensemble la démarche à suivre pour déployer une application Rails 3.1 sur Heroku (Cedar)

28Apr/110

Déployer votre application Rails sur Heroku

Prérequis

  • Avoir une application Rails qui fonctionne
  • Installer Git : $ apt-get install git-core

Placer votre code source sous GIT (versionning)

$ cd PATH/TO/MY_APP
$ git init
Initialized empty Git repository in .git/
$ git add .
$ git commit -m "new app"

Configurer votre clé SSH

Git utilise SSH comme protocole de transport sécurisé. Si vous n'en avez pas déjà une, vous devez créer une clé SSH et envoyé la clé publique sur Heroku. Avant de continuer, suivez les instructions pour savoir comment générer des clés SSH sous Linux. Pour savoir si vous pouvez passer à l'étape suivante, il suffit de vérifier que le fichier ~/.ssh/id_rsa.pub existe bien.

Créer un compte sur Heroku et créer votre application

Inscrivez-vous sur Heroku. Une fois que vous avez terminer la procédure d'inscription, il faut ouvrir un terminal pour installer le client Heroku (gem) :

$ gem install heroku

La gem Heroku installe un client qui permet de gérer toutes vos applications, les add-ons, les variables d'environnements, les clés SSH, les logs, et bien plus encore... tout cela en ligne de commande !

Pour avoir la liste complète des commandes disponibles, il suffit de taper $ heroku help ou simplement $ heroku

Avant de continuer, il est préférable d'ajouter immédiatement la clé SSH créée précédemment sur le serveur de Heroku. Ce qui permettra de déployer le code source sur le serveur par la suite :

$ heroku keys:add

Il n'y a rien d'autre à faire. Le script récupère automatiquement votre clé publique ~/.ssh/id_rsa.pub et l'envoie sur le serveur.

Voyons maintenant comment créer une application Heroku. Rien de plus simple :

$ heroku create
Creating hollow-summer-129... done
http://hollow-summer-129.heroku.com/ | git@heroku.com:hollow-summer-129.git
Git remote heroku added

Vous pouvez également spécifier le nom de l'application comme ceci :

$ heroku create my_app

On peut noter que la dernière ligne qui est renvoyée "Git remote heroku added" indique qu'un dépôt distant a automatiquement été ajouté à Git. Cette ligne n'apparait pas si vous lancer la commande $ heroku create depuis un dossier qui n'est pas soumis au système de versionning Git.
Pour vous en rendre compte, vous pouvez taper la ligne de commande suivante :

$ git remote
heroku
origin

Et pour avoir plus de détails :

$ git remote show heroku
* remote heroku
Fetch URL: git@heroku.com:hollow-summer-129.git
Push URL: git@heroku.com:hollow-summer-129.git
HEAD branch: (unknown)

La commande $ heroku open vous permet d'ouvrir un navigateur avec un message d'accueil vous indiquant que votre application a bien été créée, et qu'il ne reste plus qu'à la déployer.

Déployer votre code sur le serveur Heroku

$ git push heroku master
Counting objects: 65, done.
Compressing objects: 100% (58/58), done.
Writing objects: 100% (65/65), 80.54 KiB, done.
Total 65 (delta 14), reused 0 (delta 0)

Heroku receiving push
-----> Rails app detected
Compiled slug size is 0.1MB
-----> Launching....... done
App deployed to Heroku

To git@heroku.com:hollow-summer-129.git
* [new branch] master -> master

Voilààà ! Le déploiement est effectué... en une seule ligne de commande !

Bon il reste maintenant à mettre en place votre base de données, car votre application ne fonctionnera pas sans tables dans votre base :

$ heroku rake db:migrate

Il est bon de noter que toutes les commandes rake que vous avez l'habitude de lancer en local peuvent être lancer à distance grâce au client heroku. Par exemple vous pouvez lancer la commande suivante pour alimenter votre base avec les données par défaut :

$ heroku rake db:seed

Vous pouvez maintenant vous féliciter en admirant votre site déployé sur Heroku après avoir taper la commande $ heroku open

Utiliser un nom de domaine personnalisé (autre que *.heroku.com)

Pour cela, il faut d'abord installer un add-on Heroku : Custom Domains

$ heroku addons:add custom_domains:basic

Ensuite il suffit de spécifier le domaine à partir duquel vous voulez accéder à votre site comme ceci :

$ heroku domains:add hollow-summer.com
$ heroku domains:add www.hollow-summer.com

La plus grande difficulté consiste maintenant à modifier votre DNS via votre fournisseur de noms de domaine (ou de DNS) pour que votre nom de domaine (ici "www.hollow-summer.com") pointe vers les serveurs Heroku. Pour cela il faut modifier le Zone File pour obtenir un résultat comme ceci :

@ 3600 IN A 75.101.163.44
@ 3600 IN A 75.101.145.87
@ 3600 IN A 174.129.212.2
www 3600 IN CNAME proxy.heroku.com.

Si vous rencontrez des difficultés pour cette partie, cette vidéo vous aidera certainement.

Configurer l'envoi de mail avec SendGrid

Pour gérer les envois de mail depuis votre application Rails, il y a une solution assez simple qui consiste à envoyer vos mails en passant par votre addresse Gmail personnelle et par le serveur SMTP de Google. Voir comment faire ici.

Cependant, Heroku nous propose d'utiliser l'add-on Sendgrid, qui se repose sur le service d'envoi de mail très abouti du même nom. Plus d'infos sur Sendgrid ici.

Comme d'habitude, l'installation d'un add-on Heroku peut se faire en ligne de commande comme cela :

$ heroku addons:add sendgrid:free
Adding sendgrid:free to hollow-summer-129...done.

C'est tout ! L'add-on se charge de configurer votre application pour envoyer des emails en passant par Sendgrid.

Pour être sûr que tout va fontionner, on peut vérifier que les variables d'environnement sont bien définies avec la commande suivante :

heroku config --long | grep SENDGRID
SENDGRID_DOMAIN   = heroku.com
SENDGRID_PASSWORD = #password#
SENDGRID_USERNAME = #username#@heroku.com

Remarque :

L'installation du plugin Sendgrid crée automatiquement un compte sur le site sendgrid.com

Vous pouvez vous connecter en indiquant respectivement comme 'username' et 'password' les valeurs récupérées par la commande précédente pour SENDGRID_USERNAME et SENDGRID_PASSWORD.

Vous arriverez sur une interface d'administration complète, qui vous permettra entre autre, d'avoir des statistiques sur les emails envoyés par votre application, ou même de savoir si les destinataires ont ouverts l'email et/ou cliqués sur un lien dans l'email (si vous avez choisis les options).

Fin

Voilà, on obtient en très peu de temps une application déployée, fonctionnelle, avec envoi de mail opérationnel et nom de domaine configuré.

Je suis très impressionné par le travail réalisé par l'équipe d'Heroku. C'est vraiment un travail de pro !