Skip to content

Deploy a Heroku

Kevin Johnson edited this page Mar 18, 2020 · 2 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. Esto les permitirá ejecutar la aplicación de forma local en un entorno controlado y sin llenar su ordenador de librerías.

En este tutorial usaremos pipenv, pero hay muchas alternativas. 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 y no tener problemas de compatibilidad.

Correr la aplicación de forma local

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

Primero, necesitamos un servidor web que corra nuestra aplicación en producción de manera eficiente, 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, así que en este caso no lo usaremos. En caso de que no ocupen pipenv, este archivo se genera con pip freeze > requirements.txt

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

web: gunicorn app:app

Donde app: sirve para especificar el nombre del ejecutable, en este caso app.py

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://evening-anchorage-16176.herokuapp.com/. Lo que en realidad hizo este comando fue añadir un repositorio remoto para nuestro proyecto, que será el encargado de almacenar los archivos y hacer build de la aplicación.

Luego pueden seguir las instrucciones en la pestaña deploy del Heroku Dashboard de su nueva 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.

Finalmente, nuestra aplicación está operativa!

Notas

  • Para hacer otro deploy, basta con repetir las últimas 3 instrucciones.

  • Les recomendamos iniciar su aplicación desde un nuevo repositorio privado de git. De esta forma podrán subir sus cambios con git push y trabajar en grupo con manejo de versiones.

  • En general, un proyecto local puede estar relacionado con múltiples repositorios remotos. Así podemos pushear a distintas ramas de cada uno con la sisntaxis git push <remoto> <rama>

  • Pueden administrar su aplicación desde el Dashboard de Heroku.

  • Los archivos de esta aplicación están aquí