Depuracion y solucion de problemas¶
Estado verificado al 28 de marzo de 2026. Nota de runtime: FastFN resuelve dependencias y build por funcion segun el runtime. Python usa
requirements.txt, Node usapackage.json, PHP instala desdecomposer.jsoncuando existe, y Rust compila handlers concargo.
Vista rapida¶
- Complejidad: Principiante
- Tiempo tipico: 10-15 minutos
- Úsala cuando: una ruta, runtime, asset o accion de consola no se comporta como esperas
- Resultado: puedes aislar el problema entre discovery, runtime, assets o documentacion
Primer chequeo¶
Antes de perseguir un bug, responde estas cuatro preguntas:
- ¿El request llega a FastFN?
- ¿
/_fn/healthmuestra el runtime enup? - ¿La ruta aparece en
/_fn/catalogy/_fn/openapi.json? - ¿La ruta es de funcion, de asset o interna?
Si respondes eso rapido, la mayoria de los problemas se vuelven obvios.
404, 405, 502, 503¶
Usa estos sintomas como guia:
404: la ruta no se descubrio, fue shadowed o pertenece a un path privado405: la ruta existe, pero el metodo no esta permitido por la policy o el nombre del archivo502: el gateway llego al runtime, pero el runtime devolvio una respuesta mal formada o fallo503: el runtime no esta disponible, esta unhealthy o falta
Comandos utiles:
curl -i 'http://127.0.0.1:8080/hello'
curl -sS 'http://127.0.0.1:8080/_fn/health' | jq
curl -sS 'http://127.0.0.1:8080/_fn/catalog' | jq '{mapped_routes, mapped_route_conflicts}'
curl -sS 'http://127.0.0.1:8080/_fn/openapi.json' | jq '.paths | keys'
Que revisar primero¶
Si una ruta responde 404¶
- confirma que el nombre del archivo y la carpeta siguen la convención de routing
- revisa si ya existe una ruta en conflicto
- confirma que no sea una ruta privada, ignorada o bajo un prefijo reservado
- vuelve a correr discovery reiniciando la stack o usando el flujo de reload si tu setup lo soporta
Si una ruta responde 405¶
- confirma el prefijo del metodo en el nombre del archivo, por ejemplo
get.,post.,put. - confirma que
fn.config.jsonno restrinja la lista de metodos - confirma que el metodo del request sea el correcto
Si ves 502 o 503¶
- revisa primero
/_fn/health - despues revisa los logs del runtime
- confirma que los binarios requeridos estan instalados en modo native
- confirma que el entrypoint existe y sigue dentro de la raiz de la funcion
Si la consola se comporta raro¶
- confirma que los flags
FN_CONSOLE_*esten definidos - revisa si la UI es local-only
- confirma que existan cookies de login si el login esta habilitado
Logs¶
FastFN captura la salida del handler y la expone en los lugares habituales:
fastfn dev: salida del terminal- modo native:
fastfn logs --native --file runtime - flujos de admin/consola:
/_fn/invokey/_fn/logs
Ejemplo:
Assets y SPA¶
Si falta una pagina o asset estatico:
- confirma que la carpeta de assets configurada existe
- confirma que el archivo esta dentro de la raiz de assets
- confirma que el request sea una navegacion si el fallback SPA esta activo
- confirma que el asset no supere el limite configurado
Si una API JSON devuelve HTML inesperadamente, el request puede estar entrando en la heuristica de navegacion SPA en vez de una ruta de funcion.
Native vs Docker¶
- En
fastfn dev, importan mas los logs del contenedor y la stack del gateway - En
fastfn dev --native, importan mas los binarios del host y los ejecutables de runtime - Si el problema pasa solo en native, revisa
FN_*_BIN,FN_RUNTIME_SOCKETSy/_fn/health
Inferencia de dependencias¶
Si la inferencia de dependencias en Python o Node se comporta raro:
- revisa primero
metadata.dependency_resolution.infer_backend - si el backend es
pipreqs,detectiveorequire-analyzer, confirma que esa herramienta exista en el entorno donde corre el daemon - recuerda que la inferencia externa es mas lenta que un manifiesto explicito y conviene usarla como conveniencia, no como unico flujo de produccion
- si ya conoces los paquetes, agrega
requirements.txt,package.jsono#@requirementsy vuelve a correr