Tenemos un servidor python 3.9 fastapi que estamos tratando de ejecutar en uvicorn en heroku. Funciona bien cuando lo iniciamos en una instancia de heroku run bash , pero cuando se inicia normalmente en el colector dyno, el puerto no se vincula.
heroku/web.1 Starting process with command `uvicorn app.main:app --workers 4 --port 42374` app/web.1 INFO: Uvicorn running on http://127.0.0.1:42374 (Press CTRL+C to quit) app/web.1 INFO: Started parent process [4] app/web.1 INFO: Started server process [13] app/web.1 INFO: Waiting for application startup. app/web.1 INFO: Started server process [10] app/web.1 INFO: Waiting for application startup. app/web.1 INFO: Started server process [12] app/web.1 INFO: Waiting for application startup. app/web.1 INFO: Started server process [11] app/web.1 INFO: Waiting for application startup. app/web.1 INFO: Application startup complete. app/web.1 INFO: Application startup complete. app/web.1 INFO: Application startup complete. app/web.1 INFO: Application startup complete. heroku/web.1 Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch heroku/web.1 Stopping process with SIGKILL heroku/web.1 Process exited with status 137 heroku/web.1 State changed from starting to crashedSi lo ejecuto localmente usando Heroku CLI:
root@d2258955b223:/workspaces/app-service-cross-sell# heroku run bash Running bash on ⬢ aci-sell-service... up, run.4472 (Hobby) ~ $ uvicorn app.main:app --workers 4 --port $PORT INFO: Uvicorn running on http://127.0.0.1:26281 (Press CTRL+C to quit) INFO: Started parent process [141] INFO: Started server process [144] INFO: Waiting for application startup. INFO: Started server process [145] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Application startup complete. INFO: Started server process [143] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Started server process [146] INFO: Waiting for application startup. INFO: Application startup complete. ^Z [1]+ Stopped uvicorn app.main:app --workers 4 --port $PORT ~ $ bg [1]+ uvicorn app.main:app --workers 4 --port $PORT & ~ $ curl http://localhost:26281 INFO: 127.0.0.1:55674 - "GET / HTTP/1.1" 200 OKLa aplicación se carga desde:
if __name__ == "__main__": uvicorn.run( "main:app", host="0.0.0.0", port=config.PORT, reload=not config.DEBUG, debug=config.DEBUG, log_level=VLabLogger.get_log_level_based_on_env().lower(), )Sugeriría crear un Procfile que tenga:
web: uvicorn main:app --host=0.0.0.0 --port=${PORT}y deja que heroku maneje el PUERTO.