La aplicación consiste en una red social de eventos y actividades en las que uno se registra como usuario y añade las categorías (tipos de cosas que le interesan) en las que se perfila,puediendo añadir nuevas categorías a la lista de categorías globales.
Un usuario podrá tener una lista de amigos agregándolos mandándoles peticiones de amista, está lista de amigos le sirve para poder invitarlos a eventos privados (en los que no son visibles para todos y sólo el administrador podrá añadir más gente), también se podrán seguir empresas y poder ver sus ofertas.
La mayor utilidad de la web se basara en los eventos que en principio podremos crear eventos de varios tipos básicos que el administrador podrá modificar. El administrador podrá indicar si se permiten comentarios, si se permiten listas de usuarios con tope, pudiendo elegir si en la lista se apuntas el resto de la gente que estuvirá en la lista suplente (por ejemplo, una peña de futbol, que cuando fallé uno se incorporé el sigueinte en la lista), o incluso listas con número de asistentes (reserva de un restaurante) o eventos sencillos (como ofertas de las empresas y promociones de comida o deporte,o lo que sea...)
Habrá una gestión para las empresas con diversas opciones algo distintas de las de los usuarios normales.
En está práctica como elegí python se desplegará la infraestructura virtual con virtualenv, instalaremos todos las herramientas necesarias. Y personalmente realizaré algunos test que verifiquen el código.
Al final me he dedicado a aprender Django bastante bien, he creardo la aplicacion hasta crear usuarios, listarlos, crear categorías y verlas... He creado los test de todas las vistas creadas.
He comentado views.py y test.py con la herramiento pycco he creado un html en el que se ve su contenido
Para ejecutar todos los test juntos he usado python manage.py test que es igual que usar la herramienta nosetest
Y para la integración contigo he usado TRAVIS, me he registrado y le he indicado a que repositorio tiene que aplicarle la integración continua, he compiado el archivo requirementes.txt necesario para que TRAVIS instale la máquina virtual y añadidido el archivo .travis.yml configurandolo apropiadamente y por ultimo al línea siguiente que me comprueba que funciona
En esta parte he selecciona heroku y snap-ci para realizar el despliegue. Lo he ralizado exactamente igual que en los ejercicios del tema 3 ( Ejercicios tema 3 )
Podemos ver funcionando esta aplicación en heroku
En mis ejercicios viene explicado cómo he configurado la apliación para su despliegue, en está simplemente he cambiado la línea
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Empresas.settings")
por esta otra:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Activento.settings")
en el archivo wsgi
y algo similar en el Procfile.
Aquí se explicará un breve resumen de cómo se hizo un despliegue en el PaaS Heroku:
La primera parte es la instalación de los paquetes necesarios y registrarse y darse de alta en heroku.
Hay que modificar 3 archivos en el proyecto para que funcione correctamente:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Activento.settings")
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
En el caso de no usar Cling no nos funcionarán los CSS.
setting hay que configurarlo introduciendo los siguientes parámetros:
static_root nos hace falta para los fichero estaticos que se se crean al usar python manage.py collectstatic que usa heroku para ejecutarlo localmente.
Cómo estoy usando base de datos base de datos modifico la configuración del settings para la base de datos por la siguiente:
ON_HEROKU = os.environ.get('ON_HEROKU')
if ON_HEROKU:
DATABASES = {'default' : dj_database_url.config() }
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Con esto lo que hago es que si esto en un entorno que no sea heroku ejecuto sqlite3 pero si estoy en heroku utilizo postgressql cómo él me indica.
Y cómo nota importante en los requirements.txt hay que eliminar distributive porque heroku ya lo tiene instalado y si se intenta volver a instalar falla.
Y otro fallo que me costó ver es no ejecutar python manage.py collectstatic antes de enviarlo pués también le hace falta para mostrar al web.
Introduciendonos en Snap-ci podemos ver la lista de nuestros proyectos a los que queremos hacerle cauces (pipelines). En este caso se ha diseñado para que el código una vez introducido en github y pasado travis nos lo mande a heroku.
Introducimos el repositorio que queramos en el pipeline, seleccionamos heroku de entre los Deploy y uan vez hecho esto lo configuramos cómo se muestra en la siguiente imagen:
Lo primero es registrarse en Dockerhub:
Una vez hecho eso enlazamos con github:
Una vez hecho lo esto, selecionamos los repositorios en los que queremos que funcione docker, en este caso Activente y obtendremos su panel para controlarlo:
Ahora lo que hay que hacer es un archivo Dockerfile el directorio de nuestra aplicacioón, simplemente con esto instalamos todo lo necesario para que funcion:
Lo siguiente que tenemos que hacer es crear la imagen en local para comprobar que funciona y ejecutarla en un navegador, para desarollar esta parte con comodidad he instalado un entorno gráfico.
Para probar que funciona correctamente ejecutamos en local el siguiente comando para contruir una imagen:
Una vez contruida la imagen, comprobamos que se ha hecho:
Ahora ejecutamos la imagen::
Necesitamos hace un ifconfig para ver la ip dentro de esta imagen:
Y ejecutamos la aplicación:
Vemos ejecutándose nuestra web en el navegador:
Y ahora cada vez que hagamos un push en github, se crearán imagenes en dockerhub: