En este post supone que se usa Heroku CLI.

Contenido




Renombrar un remoto

Renombrar el remoto de heroku a heroku-staging

git remote rename heroku heroku-staging

Fuente: devcenter.heroku.com/articles — Rename a Remote




Realizar el deploy de una subcarpeta

Logearse a heroku con heroku login.

Agregar el remoto si no esta agreagdo heroku git:remote -a my-app.

Pushear la subcarpeta

git subtree push --prefix NOMBRE_SUBCARPETA heroku master

donde:

heroku es el nombre del remoto. Para listar el nombre de todos los remotos el proyecto se puede usar la instrucción.

git remote -v

Fuente: janessagarrow.com — How to Deploy a Subdirectory to Heroku




Archivo de configuración Procfile para FastApi en Heroku

Se necesita un archivo de configuración llamado Procfile que no lleva extención de archivo.

Su contenido se muestra a continuación.

======= Procfile =======

web: uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}

donde:

  • main es el nombre del archivo principal de tu proyecto de FastApi.
  • app es el nombre de la variable de FastApi en main ( app = FastAPI() ).

Fuente: youtube.com — Desplegando (Deploy) una aplicación FastAPI en Heroku.




Archivo de configuración requirements.txt para FastApi en Heroku

Heroku reconocerá que la app es de Python si incluye un archivo requirements.txt en el directorio raíz del proyecto.

El archivo requirements.txt contiene una lista de elementos que se instalarán usando

pip install -r requirements.txt

Una manera rápida de crear este archivo es con la instrucción

pip freeze > requirements.txt

Como consejo personal, si es un proyecto pequeño que incluye tensorflow en conveniente usar la versión cpu para no rebasar el limite de 500MB que brinda Heroku en su plan gratuito. Un ejemplo se muestra a continuación.

======= requirements.txt =======

fastapi==0.66.1
uvicorn==0.14.0
tensorflow-cpu==2.5.0

Fuentes:

requirements.txt en Heroku: devcenter.heroku.com/articles — Recognizing a Python app

Información sobre requirements.txt: pip.pypa.io — Requirements Files




Correr 2 apis en diferentes puertos en local

Si hay dos archivos de python llamados api.py y api2.py para correrlos en diferentes puertos en local se hace con

uvicorn api:app --host 127.0.0.1 --port 4000 --reload

uvicorn api2:app --host 127.0.0.1 --port 2000 --reload




Eliminar las rutas docs y redoc en FastAPI

Es buena idea eliminar las rutas /docs y /redoc cuando el proyecto pasa a producción.

Estas rutas se eliminan con app = FastAPI(docs_url=None, redoc_url=None), un mejor ejemplo se muestra a continuación.

from fastapi import FastAPI

app = FastAPI(docs_url=None, redoc_url=None)


@app.get("/items/")
async def read_items():
    return [{"name": "Foo"}]

fuente: fastapi.tiangolo.com/tutorial — Docs URLs




En una ruta POST recibir un json en el request y convertirlo a un diccionario

from fastapi import FastAPI, Body

app = FastAPI()

@app.post("/post_path")
async def post_path(request: dict = Body(...)):
    data = request
    return data

En data se encuentra el request convertido a diccionario.

Si, la parte de código request: dict = Body(...) se pone tal cual.

Fuente: stackoverflow.com/questions/64379089/ — FastAPI: how to read body as any valid json?