<> Cette page a pour but de donner des conseils et bonnes pratiques aux développeurs pour améliorer la qualité des productions. == Orientation industrialisation == Cette partie reflète les idées pour monter en compétences en terme de développement et de déploiement. '''Ce sont juste des idées à ce stade, elles ne sont pas forcément bonnes à prendre, mais il bon d'en garder la trace de ces réflexions''' * Créer une recette buildout spéciale AUF pour bootstraper les projets AUF Django * définir les settings propre AUF ADIMIN_URL, WSGI, proposer les pages template par défaut * Incorporer systématiquement certains eggs * django-admin-tools * south * Générer automatiquement le fichier de conf vhost pour Apache par buildout * Standardiser les procédures de déploiements * Penser à une politique de release des modules AUF en parallèle avec le code source * (Re)penser à la façon technique de promouvoir les données de référence de manière centralisée * Créer une application skin AUF pour fournir une charte graphique de base pour les frontend AUF == Trousse à outils du développeur == === PDB === Le debuggeur Python '''pdb''' avec sa version amélioré '''ipdb''' reposant sur '''ipython''' Installation de ipython Avant de l'installer, s'assurer que vous êtes bien dans un environnement virtuel [[virtualenv]] {{{ easy_install ipython }}} Pour invoquer le déboggeur, mettre un point d'arrêt dans le code : {{{ import pdb; pdb.set_trace() }}} Lorsque que le serveur est lancé en mode standalone, le debugger vous invite à taper une commande '''help''' est un bon début ;) === Django Debug ToolBar === La [[http://github.com/robhudson/django-debug-toolbar|Django Debug toolbar]] greffe un outil web visuel au projet pour explorer les templates, requêtes SQL utilisées pour construire la page. Je vous donne ici ma façon de l'incorporer à un projet, pour qu'il soit automatiquement disponible en développement sans pour autant polluer la version déployée '''buildout.cfg''' {{{ [buildout] ... eggs = ... [django] ... eggs = ${buildout:eggs} ... }}} '''devel.cfg''' {{{ [buildout] extends=buildout.cfg [django] wsgi=false settings=development eggs = ${buildout:eggs} django-debug-toolbar }}} '''development.py''' Ajout de ces 3 lignes au fichier : {{{ INTERNAL_IPS = ('127.0.0.1',) MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',) INSTALLED_APPS += ('debug_toolbar',) }}} == Framework de migration == L'avantage consiste à maitriser et à historiser les migrations de structures de données, et de données elles-mêmes. Le framework propose des outils intégrer à Django pour gérér les migrations, mais aussi des outils pour générer certaines migrations constatées sur les modèles de données. * [[South||http://south.aeracode.org]] * [[Documentation|http://south.aeracode.org/docs/]] == Environnement de Tests == La phase de développement se fait généralement en mode {{{devel.cfg}}} soit avec les flags debugs activés et le serveur web statique de django de démarré. Pour déployer en test (ou en prod), le buildout génère un WSGI en vue de pouvoir câbler notre application avec le serveur Web Apache2. Il peut être bon de tester et valider l'application dans ce mode de fonctionnement. * Installer le serveur Apache2 {{{ sudo apt-get install apache2 }}} * Configurer Apache2 Si vous souhaitez câbler une application déployée sous votre home, vous devez définir le user qui doit lancer Apache, autrement, le montage NFS interdira à Apache d'accéder à cette partie du système de fichier. Editer le fichier ''/etc/apache2/apache2.conf'' {{{ # These need to be set in /etc/apache2/envvars User olivier.larcheveque Group ${APACHE_RUN_GROUP} }}} * Installer le module WSGI {{{ sudo apt-get install libapache2-mod-wsgi }}} * Activer le module WSGI {{{ sudo a2enmod wsgi }}} * Créer un vhost Ajouter un fichier avec en le nommant avec le nom de domaine souhaité (dans cet exemple projets-p4) {{{ sudo touch /etc/apache2/sites-available/projets-p4 }}} Contenu de ce fichier {{{ ServerAdmin webmaster@localhost ServerName projets-p4 Alias /media/ /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/auf_projets/media/ Alias /admin_media/ /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/parts/django/django/contrib/admin/media/ Order deny,allow Allow from all WSGIScriptAlias / /net/nfs-authnss.b.ca.auf/home/olivier.larcheveque/Projets/auf_projets/bin/django.wsgi Order deny,allow Allow from all ErrorLog /var/log/apache2/projets-p4.log }}} * Ajouter une entrée dans le fichier hosts Pour qu'apache soit en mesure d'asocier ce vhost (avec le '''serverName''' définit, ici projets-p4), à une url ''http://projets-p4'', il déclarer notre machine locale comme étant '''projets-p4'''. Exemple de contenu de mon fichier ''hosts'' {{{ 127.0.0.1 localhost 127.0.1.1 u-ol 127.0.0.1 db.local 127.0.0.1 projets-p4 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts }}} * Activer le vhost {{{ sudo a2ensite projets-p4 }}} * Redémarrer Apache2 {{{ sudo /eic/init.d/apache2 restart }}}