Ejercicio 1: Desplegando decide en Heroku

De Wiki de EGC
Revisión del 16:04 1 dic 2021 de Ajramirez (discusión | contribuciones) (Dependencias)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Página_Principal -> 2021/2022 -> Prácticas - 21/22 -> Despliegue_de_aplicaciones:_PaaS

Al hacer nuestro primer push hemos observado errores de configuración. Resolvámoslos:

Parametros por defecto en Heroku.

La configuración a usar por Django en Heroku no tiene por qué parecerse a nuestra configuración local, por ejemplo el puerto de la apliación. Es más, esa configuración dependerá del propio Heroku cuando levante la aplicación por lo que se tendrá que obtener dinámicamente.

Para ello, añade el import de Heroku en el decide/decide/settings.py de decide:

import django_heroku

Y actívalo:

django_heroku.settings(locals())

No olvidar indicar la BASEURL que ahora será la de nuestra applicación en Heroku. También habrá que definir la propiedad "APIS" ya que en Heroku no se cargará el local_settings.py.

BASEURL = 'https://TU URL'
...
APIS = {...}
...
import django_heroku
django_heroku.settings(locals())

Esto, además, resolverá problemas con el comando collectstatic de Django.

Dependencias

Los cambios en estas dependencias son django-heroku que hemos importando arriba y gunicorn como servidor requirements.txt

django-heroku
gunicorn

También podemos fijar la versión de python a usar, si no, Heroku usará una por defecto. Esto se define en el archivo runtime.txt

python-3.7.12

Vuelve a enviar el código a Heroku y accede a la url de nuestra app en Heroku

  • ¿Por qué sigue fallando?

Observemos los errores que ocurren en el log con:

heroku -a app_name logs --tail
#-a app_name solo es necesario si no estamos dentro de la carpeta de la aplicación

Heroku Procfile

[[1]]

Las aplicaciones Heroku incluyen un archivo Procfile en su raiz, al estilo de lo que hacíamos con el travis.yml. Este archivo de recetas se ejecuta por una app en el arranque de la misma. En el Procfile se puede describir entre otros:

  • El servidor web de tu aplicación
  • Distintos procesos de "workers"
  • Un proceso singleton (e.g. relog, semaforos, ...)
  • Tareas a ejecutar antes de lanzar el despliegue.

Para lanzar decide en Heroku necesitaremos dos pasos que en el procfile tendrían esta pinta:

% prepara el repositorio para su despliegue. 
release: sh -c 'cd decide && python manage.py migrate'
% especifica el comando para lanzar Decide
web: sh -c 'cd decide && gunicorn decide.wsgi --log-file -'

Conectándonos por SSH a nuestra aplicación

El último paso es conectarnos a heroku y crear un super usuario para las votaciones

heroku run  -a YOUR APP NAME "sh -c 'cd decide && python manage.py createsuperuser'"

Trata de votar.

  • ¿En qué punto falla la aplicación? ¿Por qué?

Procesos y bases de datos

Podemos ver los procesos corriendo el Heroku con

heroku ps

Incluso podríamos tratar de subir las replicas del dyno web con

heroku scale web=2
  • ¿Por qué no me permite hacerlo?
  • ¿Qué ocurre si hago scale web=0?

Heroku también me permite acceder a los servicios de base de datos que tenga en remoto. Para acceder al servicio de psql haríamos

heroku psql

Aquí, por ejemplo, podríamos consultar los usuarios del sistema accediento a la tabla auth_user de django.