Я уже несколько дней безуспешно пытаюсь развернуть бота на героку. У моего бота есть сервер действий, размещенный в другом приложении. Основной бот содержит Dockerfile с содержимым ниже:
# 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'
После отправки этого контейнера на героку я продолжаю получать следующий журнал:
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
Мой startup.sh
содержит:
echo PORT $PORT
rasa run -m models --endpoints heroku-endpoints.yml --cors "*" --enable-api -p $PORT
Что я делаю неправильно? Пожалуйста, помогите.
Я столкнулся с той же проблемой, но при развертывании slackbot на Python. Я использовал пушку, и проблема, похоже, в том, что пушка не привязалась вовремя к порту, предоставленному героку. Это было решено путем добавления параметра --bind :$PORT
в Procfile, как указано здесь
Журнал, подтверждающий успешность привязки gunicorn, выглядит следующим образом
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)
Я знаю, что это не имеет прямого отношения, но надеюсь, что это поможет вам!
Еще одна вещь, которую вы можете попробовать, это сделать исходящий запрос из вашего скрипта, что временно решило мою проблему, а также заставило приложение использовать порт для отправки некоторого исходящего трафика. Вы можете обнаружить, что запуск приложения занимает слишком много времени и оно не может вовремя привязать себя к порту