J'ai pris le temps de tester la plateforme Heroku, qui fait pas mal de bruit en ce moment.
L'idée est simple : le développeur pousse son code dans une branche Git pour déployer son application. Ils se chargent du reste.
La documentation pour déployer du python est bien faite.
heroku et virtualenv
Pour commencer, j'ai installé l'outil heroku en ruby (sic), dans un virtualenv
sudo aptitude install rubygems virtualenv --no-site-packages env source env/bin/activate
Merci à Bruno, qui nous a expliqué récemment comment faire cohabiter les gems ruby et virtualenv
export GEM_HOME="$VIRTUAL_ENV/gems" export GEM_PATH="" export PATH=$PATH:$GEM_HOME/bin
(À ajouter au hook dans ~/.virtualenvs/postactivate pour plus tard)
Pour terminer, il suffit de poser le gem
gem install heroku
Et j'ai bien heroku cloisonné dans le virtualenv.
(env)src$ which heroku
/home/mathieu/path/env/gems/bin/heroku
(env)src$ heroku help
Usage: heroku COMMAND [--app APP] [command-specific-options]
heroku et la Configuration de l'Application
Pour apprivoiser la plateforme, j'ai utilisé le micro-framework Flask, suggéré dans le tutorial python. C'est ultra-simple, ultra-léger, ultra-tout.
Afin de gérer ma configuration, j'ai créé une classe Settings qui utilise les variables d'environment:
# settings.py
import os
class Settings(object):
DEBUG = bool(os.environ.get("DEBUG"))
TESTING = bool(os.environ.get("TESTING"))
PORT = int(os.environ.get("PORT", 5000))
HOST = os.environ.get("HOST", '0.0.0.0')
Que je branche dans l'application :
# app.py
from flask import Flask
from settings import Settings
app = Flask(__name__)
settings = Settings()
#...
if __name__ == "__main__":
# ...
app.config.from_object(settings)
Ensuite grâce au client heroku, je peux contrôler à distance la configuration de mon application, qui est redémarrée à chaque changement :
(env)src$ heroku config
PATH => bin:/usr/local/bin:/usr/bin:/bin
PYTHONUNBUFFERED => true
(env)src$ heroku config:add DEBUG=True
Adding config vars:
DEBUG => True
Restarting app... done, v19.
(env)src$ heroku config
DEBUG => True
PATH => bin:/usr/local/bin:/usr/bin:/bin
PYTHONUNBUFFERED => true
(env)src$ heroku config:remove DEBUG
Removing DEBUG and restarting app... done, v20.
Je peux revenir en arrière quand un changement de config a posé problème :
(env)src$ heroku releases
Rel Change By When
---- ---------------------- ---------- ----------
v20 Config remove DEBUG your@mail.com 25 seconds ago
v19 Config add DEBUG your@mail.com 1 minute ago
(env)src$ heroku rollback v19
Rolled back to v19
#python, #flask, #tips, #heroku - Posted in the Dev category