7

Mes premiers pas avec Heroku

 3 years ago
source link: https://blog.mathieu-leplatre.info/mes-premiers-pas-avec-heroku-fr.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Mes premiers pas avec Heroku

Mes premiers pas avec Heroku

Mon 10 October 2011

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             [email protected]         25 seconds ago
v19   Config add DEBUG                [email protected]         1 minute ago


(env)src$ heroku rollback v19
Rolled back to v19

#python, #flask, #tips, #heroku - Posted in the Dev category


© Copyright 2020 by Mathieu Leplatre. mnmlist Theme

Content licensed under the Creative Commons attribution-noncommercial-sharealike License.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK