Обслуживание интерактивной фигуры боке на heroku

я пытаюсь обслуживать интерактивный bokeh рисунок через heroku. Фигура, которую я пытаюсь обслуживать, по существу эквивалентна этой (пример, код). Я новичок в обоих bokeh и heroku поэтому я уверен, что я упускаю что-то очень простое. я думаю, что я пытаюсь сделать, должно быть довольно простым.

во-первых, я могу обслуживать свою фигуру локально, используя . Где myapp - это имя модуля python это включает в себя bokeh рис. Обратите внимание, что --show флаг просто предложит bokeh чтобы открыть окно браузера после построения фигуры и запуска сервера.

далее, я настроил heroku учетная запись и создал свое первое приложение, выполнив шаги в Heroku-Начало Работы С Python учебник. Мой репозиторий git включает myapp, a и Procfile.

увы, что-то не работает и я в тупике. У меня есть пробовал кучу разных вариантов в моем Procfile и никто не работал. С bokeh serve ... команда запускает сервер, не должен Profile похоже, что это делает трюк:

web: bokeh serve --port $PORT myapp

Должно ли это работать? Возможно, мне чего-то не хватает, и мне нужно создать flask приложение, которое обертывается вокруг моего bokeh app но, насколько я могу судить, это не кажется необходимым. Может быть, кто-то знает хороший учебник, который объединяет все эти шаги, я не нашел полного еще.

обновление: Я приклеиваю немного моего heroku журналы ниже. Как вы справляетесь с этим --host whitelist вопрос?

2016-07-17T05:00:46.513139+00:00 heroku[slug-compiler]: Slug compilation started
2016-07-17T05:00:46.366909+00:00 heroku[api]: Deploy 9b63d8a by me@me.com
2016-07-17T05:00:46.367087+00:00 heroku[api]: Release v4 created by me@me.com
2016-07-17T05:00:46.624937+00:00 heroku[web.1]: State changed from crashed to starting
2016-07-17T05:00:55.188978+00:00 heroku[web.1]: Starting process with command `bokeh serve --port=39665 myapp.py`
2016-07-17T05:00:57.876287+00:00 app[web.1]: 2016-07-17 05:00:57,876 Starting Bokeh server on port 39665 with applications at paths ['/myapp']
2016-07-17T05:00:57.868758+00:00 app[web.1]: 2016-07-17 05:00:57,868 Starting Bokeh server version 0.12.0
2016-07-17T05:00:57.876378+00:00 app[web.1]: 2016-07-17 05:00:57,876 Starting Bokeh server with process id: 3
2016-07-17T05:00:58.800309+00:00 heroku[web.1]: State changed from starting to up
2016-07-17T05:00:59.970326+00:00 app[web.1]: 2016-07-17 05:00:59,970 Rejected connection from host 'myapp.herokuapp.com' because it is not in the --host whitelist
2016-07-17T05:00:59.973495+00:00 app[web.1]: 2016-07-17 05:00:59,970 403 GET / (XX.XX.XXX.XX) 1.29ms
2016-07-17T05:00:59.975282+00:00 heroku[router]: at=info method=GET path="/" host=myapp.herokuapp.com request_id=xxxxxxxxxxxxx fwd="XX.XX.XX.XX" dyno=web.1 connect=1ms service=4ms status=403 bytes=219

1 ответов


Я просто собираюсь ответить на свой вопрос, так как я в конечном итоге смог заставить это работать, и никто еще не ответил на него.

Я закончил с Procfile это выглядело так:

web: bokeh serve --port=$PORT --host=myapp.herokuapp.com --host=* \
     --address=0.0.0.0 --use-xheaders myapp.py

немного фона о том, что означают все эти аргументы (насколько я могу судить):

--port: указывает порт, который bokeh сервер будет слушать, $PORT устанавливается heroku

--host=myapp.herokuapp.com и --host=*: Укажите имя хоста, как myapp.heroku..., подстановочный знак должен позволять принимать все хосты. Я не уверен, что это нужно больше.

--address=0.0.0.0: Я думаю, это говорит bokeh чтобы выяснить самостоятельно, какой IP-адрес он будет включен.

--use-xheaders причины bokeh для переопределения удаленной схемы IP и URI / протокола

Я рад внести изменения в это или принять более осведомленный ответ пользователей, если есть проблемы с этим подходом.