-
Notifications
You must be signed in to change notification settings - Fork 22
Deploy a Heroku
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()
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.
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:
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!
-
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í