1 dev env
Qwann edited this page 2017-07-20 00:37:11 +02:00

Environnement de développement

Il a deux façon d'accéder à l'environnement de développement de GestionÉvènementiel. Celui utilisant la Vagrant, plus lourde, mais très proche des conditions de développement, et l'utilisation d'un virtualenv qui a l'avantage d'être plus rapide d'utilisation.

La VM Vagrant

Installation

La façon recommandée de simuler GestionÉvènementiel sur votre machine est d'utiliser Vagrant. Vagrant permet de créer une machine virtuelle minimale sur laquelle tournera GestionÉvènementiel; ainsi on s'assure que tout le monde à la même configuration de développement (même sous Windows !), et l'installation se fait en une commande.

Pour utiliser Vagrant, il faut le télécharger et l'installer.

Vagrant permet d'utiliser différents types de machines virtuelles; par défaut il utilise Virtualbox qu'il vous faudra également télécharger et installer.

L'installation est terminée.

Utilisation

Premier lancement

Machine virtuelle

Le lancement se fait avec la commande vagrant up dans le répertoire du dépot local.

À son premier lancement, Vagrant va télécharger une image Debian8 ainsi que des mises à jour (il vaut mieux avoir une connexion Internet pas trop mauvaise)

Paquets Python

Pour mettre à jour les paquets Python, il faut d'abord se connecter à la machine virtuelle en utilisant vagrant ssh, puis utiliser la commande suivante : pip install --upgrade -r requirements-devel.txt

Pour mettre à jour les modèles après une migration, il faut ensuite faire : python manage.py migrate

Utilisations suivantes

Voici quelques commandes importantes pour gérer la machine virtuelle :

  • vagrant up permet de lancer la machine virtuelle. Si une machine virtuelle existe déjà, elle sera réutilisée ; sinon, Vagrant va créer et configurer une nouvelle machine virtuelle pour vous.

  • vagrant suspend permet de sauver l'état de la machine virtuelle sur le disque pour la relancer plus tard (y compris après un reboot) avec vagrant up

  • vagrant halt permet d'éteindre la machine virtuelle (par comparaison avec vagrant suspend, cela prend moins de place sur le disque car il n'y a pas besoin de sauver la RAM, mais la recréation avec vagrant up sera plus lente)

  • Enfin, vagrant destroy permet de détruire complètement la machine virtuelle : lors du prochain appel de vagrant up, elle sera réinstallée de zéro. Attention, contrairement aux deux méthodes précédentes, vagrant destroy détruira irrémédiablement le contenu de votre base de données locale, si elle vous est d'un quelconque intérêt, réfléchissez à deux fois !

  • vagrant ssh vous connecte en SSH à la machine virtuelle.

Une fois connecté en SSH, vous pouvez utiliser les commandes Django habituelles.

Lancement du serveur

Par défaut Django n'écoute que sur l'adresse locale de la machine virtuelle - or vous voudrez accéder à GestionÉvènementiel depuis votre machine physique.

Pour lancer le serveur, il faut donc lancer la commande python manage.py runserver 0.0.0.0:8000.

Le dossier avec le code est partagé entre la machine virtuelle et votre machine physique : vous pouvez donc utiliser votre éditeur favori pour coder depuis votre machine physique, et les changements seront répercutés automatiquement dans la machine virtuelle.

You know sometimes…

Des fois on essaye des trucs, on rate une migration, on s'assoie sur son clavier et PAF on casse la base de donnée. Même si le très radical vagrant destroy && vagrant up est une solution, elle est un peu longue. Il est possible de repartir avec une base de donnée fraîche en tapant les commandes suivantes

mysql -uroot -p$DBPASSWD -e "DROP DATABASE $DBNAME; CREATE DATABASE $DBNAME"
python manage.py migrate

Le virtualenv

Utilisation de virtualenv

premier lancement

Pour créer le virtualenv il suffit de lancer la commande virtualenv venv depuis la racine de votre dossier git, qui créera un répertoire venv à cet endroit. Pour installer les paquets python nécessaires : pip install -r requirements-devel.txt.

Utilisation

Pour rentrer dans l'environnement virtuel simplement lancer : source venv/bin/activate. S'il y a de nouveaux paquets à installer il suffit de les installer à l'aide de pip une fois dans le virtualenv ou simplement de lancer à nouveau pip install -r requirements-devel.txt.

Pour sortir du virtualenv simplement lancer deactivate.

Environnement

Avec cette méthode les condition ne sont pas les mêmes qu'en production. Le SQL est géré ç l'aide de SQLite et la base de donnée est stockée dans un fichier à la racine du répertoire git. Il est possible de lancer django comme d'habitude. Cela est assuré par le fichier /evenementiel/settings/devlocal.py.

Commandes utiles pour interagir avec GestionÉvènementiel

Django fournit un certain nombre de fonctions pour interagir avec GestionÉvènementiel en ligne de commande. Pour les lancer, taper python manage.py <command_name>. Une partie d'entre elles sont décrites ci-dessous.

Les indispensables

  • La commande runserver… lance le serveur ! On peut spécifier une interface et un port en ajoutant à la suite 0.0.0.0:8000 par exemple.
  • La commande migrate permet de faire suivre la base de donnée lorsque les modèles changent. Les "migrations" appliquées par migrate sont stockées dans app_name/migrations/. Lorsque vous effectuez des changements dans les modèles, utilisez makemigrations (cf plus bas) pour créer ces fichiers de migration automatiquement. On peut rétablir une version précise de la BDD, pour une application, avec migrate bda 0001 par exemple.
  • La commande makemigrations crée automatiquement les fichiers de migrations dont il est question plus haut. Ils sont stockés dans app_name/migrations/. Ils peuvent être édités à la main si les migrations automatiques ne suffisent pas à vos besoins. Typiquement s'il faut ajouter un élément à la base de donnée pour la rendre cohérente. Cf https://docs.djangoproject.com/en/dev/ref/migration-operations/ pour plus de détails
  • La commande createsuperuser permet de créer un utilisateur avec tous les droits. Il peut créer des utilisateurs, des objets, etc via l'[interface-admin](gestiocof admin).

Autres commandes utiles

  • La commande shell ouvre un shell python qui connaît la config du site. Ça permet de faire toutesles opérations qu'on pourrait faire depuis une vue par exemple. Utile pour faire des essais avant de coder ou manipuler la base de données.
  • Un autre commande permettant de manipuler la base de donneés : dbshell qui lance un shell mysql sur la BDD de GestionÉvènementiel
  • Les commandes loaddata et dumpdata permettent respectivement de charger et d'exporter tout ou partie de la base de données. À noter que l'option --indent=4 est utile pour la lisibilité. Attention il peut se passer des choses pas nettes si on charge une bdd dans une bdd non vide.

Doc officielle

Pour plus de détails sur ces commandes et d'autres encore, ne pas hésiter à taper python manage.py help <command_name>et à visiter https://docs.djangoproject.com/en/dev/ref/django-admin/