在heroku上服务交互式散景图

jha*_*man 8 python heroku flask bokeh

我正试图bokeh通过heroku 提供互动人物.我试图提供的数字基本上等同于这个(例如,代码).我是两个人的新手bokeh,heroku所以我很确定我错过了一些非常基本的东西 - 我认为我想要做的事应该非常简单.

首先,我可以使用bokeh serve --show myapp命令在本地提供我的数字.myapp包含该bokeh图的python模块的名称在哪里.请注意,一旦构建了图形并且服务器正在运行,该--show标志只会提示bokeh打开浏览器窗口.

接下来,我heroku按照Heroku - Python入门教程中的步骤设置了一个帐户并创建了我的第一个应用程序.我的git存储库包括myapp一个requirements.txt文件和Procfile.

唉,有些东西不起作用,我很难过.我已经尝试了一些不同的选项Procfile,但没有一个有效.由于bokeh serve ...命令启动服务器,不应该Profile看起来像这样做伎俩:

web: bokeh serve --port $PORT myapp
Run Code Online (Sandbox Code Playgroud)

那会有用吗?也许我错过了一些东西,我需要创建一个flask包装我的bokeh应用程序的应用程序,但据我所知,这似乎没有必要.也许有人知道一个很好的教程,将所有这些步骤结合在一起,我还没有找到一个完整的教程.

更新: 我在下面粘贴了一些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
Run Code Online (Sandbox Code Playgroud)

jha*_*man 9

我只是回答我自己的问题,因为我最终能够让它工作,而其他人还没有回答.

我结果Procfile看起来像这样:

web: bokeh serve --port=$PORT --host=myapp.herokuapp.com --host=* \
     --address=0.0.0.0 --use-xheaders myapp.py
Run Code Online (Sandbox Code Playgroud)

关于所有这些论点意味着什么的背景(据我所知):

--port:指定bokeh服务器将侦听的端口,$PORT由...设置heroku

--host=myapp.herokuapp.com--host=*:指定主机名myapp.heroku...,通配符应该允许接受所有主机.我不再确定这是否需要了.

--address=0.0.0.0:我认为这说明bokeh了它自己的IP地址.

--use-xheaders:导致bokeh覆盖远程IP和URI方案/协议

如果这种方法存在问题,我很乐意对此进行编辑或接受更有知识的用户答案.


小智 6

接受的答案对我写的不起作用(可能是由于散景版本差异),但由于这仍然是这个问题的热门话题之一,这里是我的小修改:

web: bokeh serve --port=$PORT --num-procs=0 --allow-websocket-origin=myapp.herokuapp.com --address=0.0.0.0 --use-xheaders myapp.py
Run Code Online (Sandbox Code Playgroud)