Ir al contenido

Development

A continuación se detallan los pasos a seguir para levantar una versión local de la aplicación, apuntado a futuros desarrolladores de la misma. Este documento asume un entorno Linux para el desarrollo, y fue probado bajo Ubuntu 16.04.

  • Python 3.6.x
  • Virtualenv
  • Docker
  • Docker compose

Es recomendable instalar las dependencias de la aplicación en un entorno virtual para evitar conflictos con otras aplicaciones de versionado de las librerías usadas. Este ejemplo instala un entorno virtual de Python 2.7.6 con el nombre stiempo-api, y todas las dependencias de la aplicación.

Ventana de terminal
pyenv virtualenv 3.6.6 stiempo-api
pyenv activate stiempo-api
pip install -r requirements/local.txt

Algunas configuraciones locales (como variables de entorno, o la base de datos usada) pueden llegar a diferir de la versión productiva, y deben ser seteadas manualmente. Para ello se provee una configuración de ejemplo, que puede ser usada como base.

Ventana de terminal
cp conf/settings/local_example.py conf/settings/local.py
cp conf/settings/.env.default_local conf/settings/.env

A su vez, se debe informar a Django cual es el módulo de configuración a leer. Este módulo debe ser el mismo que fue copiado en el paso anterior (conf/settings/local.py en el ejemplo). Esto se hace seteando la variable de entorno DJANGO_SETTINGS_MODULE, lo cual se puede hacer persistente entre sesiones de terminal escribiéndolo en .bashrc (o similar, dependiendo de la terminal utilizada):

Ventana de terminal
export DJANGO_SETTINGS_MODULE=conf.settings.local

Los servicios (PostgreSQL, Elasticsearch, Redis) pueden ser levantados usando Docker y Docker Compose:

Ventana de terminal
docker-compose pull
docker-compose up -d

Correr las migraciones de las base de datos:

Ventana de terminal
python manage.py migrate

Por defecto usando la configuración local, todas las tareas asincrónicas se corren de manera sincrónica. Si se desea testear la integración con rq de manera completa, configurar las colas para ser asincrónicas cambiando el código

for queue in RQ_QUEUES.values():
queue['ASYNC'] = False

por

for queue in RQ_QUEUES.values():
queue['ASYNC'] = True

Luego se pueden correr los workers para las colas deseadas con el siguiente comando. Notar que el comando bloqueará la terminal. Los nombres de las colas se encuentran bajo la variable RQ_QUEUE_NAMES en el archivo conf/settings/base.py

Ventana de terminal
python manage.py rqworker <queues>

Este comando levanta la aplicación.

Ventana de terminal
python manage.py runserver

Si está todo en orden se podrá leer algún mensaje como el siguiente:

Ventana de terminal
Django version 1.11.6, using settings 'conf.settings.local'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Correr scripts/tests.sh desde el directorio raíz. También se proveen scripts que chequean estilos (scripts/pycodestyle.sh) y pýlint (scripts/pylint.sh)