betagouv / CNR

https://conseil-refondation.fr/
MIT License
10 stars 1 forks source link

Fix docker setup #254

Closed volnt closed 2 years ago

volnt commented 2 years ago

Cette PR fait deux choses dans deux commits différents dans le but de faire marcher le setup du projet en local en suivant le README, à savoir:

Copier les variables d'environnement cp .env.example .env Lancer les containers docker-compose up

Lorsque j'ai essayé de faire ça j'ai eu deux problèmes.


Le premier était que par défaut l'image docker postgres:13 va créer une base de donnée qui a le même nom que POSTGRES_USER si POSTGRES_DB n'est pas spécifié. Ici en l'occurence la base de donnée est créée avec le nom postgres.

POSTGRES_DB This optional environment variable can be used to define a different name for the default database that is created when the image is first started. If it is not specified, then the value of POSTGRES_USER will be used.

Source: https://hub.docker.com/_/postgres

Par contre le container web s'attend à une base de donnée qui s'apelle cnr..

Il y a deux manière de corriger ce problème:

  1. Soit on modifie le nom qu'attend le container web
  2. Soit on modifie le nom de la base de donnée

Dans cette PR j'ai choisi la solution 2. parce que ça permet d'expliciter le nom de la DB via une configuration claire, au lieu de se baser sur un comportement de fallback (l'utilisation du POSTGRES_USER si POSTGRES_DB n'existe pas). Explicit is better than implicit.


Le deuxième était l'exception suivante:

  File "/app/cnr/settings.py", line 278, in <module>
    SEND_IN_BLUE_LIST = int(os.getenv("SEND_IN_BLUE_LIST", 1))
ValueError: invalid literal for int() with base 10: ''

Dans .env.example on définit SEND_IN_BLUE_LIST=, ce qui set la variable à une chaine de caractère vide (''). Ca raise donc une ValueError lorsqu'on essaye de la caster en entier à cette ligne là.

Là encore on a deux manière de corriger ça:

  1. On définit une valeur par défaut valide dans .env.example (1 par exemple)
  2. On ne définit pas la variable dans .env.example et on se base sur la valeur par défaut définie dans settings.py (1)

Dans cette PR j'ai choisir la solution 2. parce que settings.py définit déjà une valeur par défaut, donc pour un premier lancement de l'application en local je pense que ça suffit.


Après avoir résolu ces deux problème j'arrive bien à lancer l'application en local :+1: