He estado intentando implementar un bot en heroku durante días sin éxito. Mi bot tiene un servidor de acciones alojado en otra aplicación. El bot principal contiene un Dockerfile con el siguiente contenido:
# from rasa base image
FROM rasa/rasa:2.8.2-full
# copy all source and the Rasa generated model
COPY . /app
# inform which port will run on
EXPOSE 5005
# script to run rasa core
COPY startup.sh /app/scripts/startup.sh
# script to run rasa shell
COPY shell.sh /app/scripts/shell.sh
USER root
RUN chmod a+x /app/scripts/startup.sh
RUN chmod a+x /app/scripts/shell.sh
WORKDIR /app
ENTRYPOINT []
ENV shell_mode false
# launch script (rasa shell or rasa run)
CMD sh -c 'if [ "$shell_mode" = false ]; then /app/scripts/startup.sh; else /app/scripts/shell.sh; fi'
Después de insertar este contenedor en heroku, sigo recibiendo el siguiente registro:
2021-08-08T05:05:19.003044+00:00 heroku[web.1]: Starting process with command `/bin/bash -o pipefail -c sh\ -c\ \'if\ \[\ \"\false\"\ \=\ false\ \]\;\ then\ /app/scripts/startup.sh\;\ else\ \ /app/scripts/shell.sh\;\ fi\'`
2021-08-08T05:05:22.624829+00:00 app[web.1]: PORT 56161
2021-08-08T05:05:28.172219+00:00 app[web.1]: 2021-08-08 05:05:28 INFO root - Starting Rasa server on http://localhost:56161
2021-08-08T05:05:28.198725+00:00 app[web.1]: 2021-08-08 05:05:28 INFO rasa.model - Loading model models/20210807-142446.tar.gz...
2021-08-08T05:06:19.182952+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2021-08-08T05:06:19.237369+00:00 heroku[web.1]: Stopping process with SIGKILL
2021-08-08T05:06:19.401953+00:00 heroku[web.1]: Process exited with status 137
2021-08-08T05:06:19.707060+00:00 heroku[web.1]: State changed from starting to crashed
Mi startup.sh
contiene:
echo PORT $PORT
rasa run -m models --endpoints heroku-endpoints.yml --cors "*" --enable-api -p $PORT
¿Qué estoy haciendo mal? Por favor ayuda.
Respuesta1
Encontré el mismo problema, pero al implementar un slackbot de Python. Estaba usando gunicorn y el problema parece ser que gunicorn no se vinculó a tiempo al puerto proporcionado por heroku. Esto se resolvió agregando --bind :$PORT
una opción al Procfile como se mencionóaquí
El registro que asegura que el enlace de Gunicorn ha sido exitoso es este
2021-09-06T17:43:34.126351+00:00 app[web.1]: [2021-09-06 17:43:34 +0000] [4] [INFO] Starting gunicorn 20.1.0
2021-09-06T17:43:34.127129+00:00 app[web.1]: [2021-09-06 17:43:34 +0000] [4] [INFO] Listening at: http://0.0.0.0:47022 (4)
Sé que no está directamente relacionado, ¡pero espero que te ayude!
Otra cosa que puedes intentar es realizar una solicitud saliente desde tu script, lo que resolvió mi problema temporalmente y obliga a la aplicación a usar un puerto para enviar tráfico saliente. Es posible que descubra que el inicio de la aplicación está tardando demasiado y no puede vincularse al puerto a tiempo.