Skip to content

Tutorial Deploy a Heroku

Kevin Johnson edited this page Jun 14, 2019 · 19 revisions

Aplicación básica

Supongamos que tenemos una sencilla aplicación en Flask, cuyo código se muestra a continuación:

app.py

from flask import Flask
import pandas
import pymongo

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

Manejo de dependencias

Al igual que para la entrega 4, sugerimos utilizar un entorno virtual para la instalación de las librerías necesarias. En este tutorial usaremos pipenv. Por lo tanto, debemos hacer:

pipenv install flask pandas pymongo

Esto genera dos archivos, Pipfile y Pipfile.lock, que sirven para congelar las versiones de las librerías que estamos usando. Así, otro desarrollador solo tiene que ejecutar pipenv install para instalarlas.

Correr la aplicación

Primero debemos ingresar al entorno virtual. Para ello ejecutamos:

pipenv shell

Una vez dentro, para correr la aplicación:

python app.py

Vemos que está funcionando:

Deploy a producción

Antes necesitamos un servidor web que corra nuestra aplicación en producción, como por ejemplo gunicorn. Lo instalamos con:

pipenv install gunicorn

Luego, heroku necesitará 2 archivos adicionales:

  • Procfile: especifica los comandos que deben ser ejecutados por la aplicación al iniciar. Se puede usar para declarar una variedad de tipos de procesos, incluyendo el servidor web de la aplicación.
  • requirements.txt: tiene la misma función que Pipfile.lock, pero en otro formato para ser leído por Heroku.

Por lo tanto, creamos un archivo llamado Procfile con el siguiente contenido:

web: gunicorn app:app

Y para crear el archivo de requerimientos ejecutamos:

pip freeze > requirements.txt

Ahora estamos listos para subir nuestra aplicación 👌. Para continuar necesitamos instalar la Command Line Interface de Heroku.

Una vez instalada, nos loggeamos desde la terminal con

heroku login

Luego, creamos una aplicación de heroku con:

heroku create

Esto nos entrega una URL del tipo https://shrouded-bastion-96026.herokuapp.com/ . Lo que en realidad hizo este comando fue añadir un repositorio remoto para nuestro proyecto, que será el encargado de correr nuestra aplicación.

Si ingresamos a este URL, vemos que nuestra aplicación no está corriendo. Esto es porque no hemos hecho commit de nuestros archivos y no los hemos pusheado a este repositorio remoto.

git add --all
git commit -m "my first app"
git push heroku master

Este último comando, además de subir los cambios, provoca el build de la aplicación, que podemos seguir a través de la terminal.

Nota 1: para hacer otro deploy, basta con repetir esas últimas 3 instrucciones. Nota 2: para subir los cambios a su repositorio de git, pueden hacer de forma paralela git push.

Finalmente, nuestra aplicación está operativa!

Clone this wiki locally