我正在尝试将一个Bokeh应用程序部署到一般Internet,但即使小部件和div正确呈现,实际情节也根本没有显示。
我已经搜索了一下,发现StackOverflow上最近的thread似乎与我的问题类似,但我不确定我的应用程序是否发生了同样的事情。此外,我不太了解建议的解决方案。
此外,当我使用命令bokeh serve --show /path/myapp.py
在本地运行应用程序时,一切运行良好。
有人可以开导我吗?我加入了Chrome控制台的图像。
谢谢!
修改
我试图用AWS复制这种情况。我上传了我的.py应用程序并从EC2实例运行bokeh serve app.py --port=80 --host='*'
。我有同样的问题,除了情节本身,一切都在那里。这表明代码本身存在问题。
答案 0 :(得分:1)
我在运行Ubuntu 16.04.1 LTS(xenial)的服务器上使用apache版本2.4.18,我正在使用反向代理测试一个简单的散景服务器应用程序。经过一些试验和错误后,我发现以下配置对我有用。我需要反向代理才能工作。要启动服务器,我使用:
bokeh serve my_app.py --port XXXX --host NAMEOFSERVER:80 --prefix SOMEPREFIX
为此,我使用以下配置在bokehserver.conf
文件夹中创建了/etc/apache2/sites-available
文件:
<Location /SOMEPREFIX/my_app>
ProxyPass http://localhost:XXXX/SOMEPREFIX/my_app
ProxyPassReverse http://localhost:XXXX/SOMEPREFIX/my_app
</Location>
<Location /SOMEPREFIX/my_app/ws>
ProxyPass ws://localhost:XXXX/SOMEPREFIX/my_app/ws
ProxyPassReverse ws://localhost:XXXX/SOMEPREFIX/my_app/ws
</Location>
Alias /SOMEPREFIX/static /some_place_in_server/bokeh/server/static
<Directory /some_place_in_server/bokeh/server/static>
Options +Indexes
</Directory>
然后你必须重新配置apache:
sudo a2ensite bokehserver.conf
sudo service apache2 restart
在我的浏览器中,我使用
http://NAMEOFSERVER/SOMEPREFIX/my_app
如果我决定使用IP
而不是域名,那么我必须使用IP
运行散景服务器:
bokeh serve my_app.py --port XXXX --host IPnumber:80 --prefix SOMEPREFIX
它适用于:
http://IPnumber/SOMEPREFIX/my_app
您可以选择SOMEPREFIX,XXXX是您正在使用的端口,my_app是您正在测试的应用程序。 some_place_in_server
是散景文件所在的位置。我把它们复制到不同的地方。我的发行版中的原始位置是/usr/local/lib/python2.7/dist-packages/bokeh/server/static
,但建议放在其他位置。请参阅Running a Bokeh Server,特别是Apache服务器部分。
答案 1 :(得分:1)
正如我之前在编辑中提到的那样,实际问题并不适合服务器本身。我的.py文件中的某些代码导致浏览器无法显示图表。
以下是有问题的代码:
p.xaxis.formatter = FuncTickFormatter(code="""
function (tick) {
var mapping = {1.25: "20 000 $", 5.25: "50 000 $"};
return mapping[tick];
};
""")
当我评论这部分时,情节突然出现。知道为什么会导致问题吗?
为了记录,我把这个块放在那里,因为我只在x轴上需要两个刻度,我希望它们显示没有链接到数据的特定数字。
修改强> 我找到了导致这种情况的原因:语法。它与question I asked a few months ago相关联。上面的代码对我有用,因为我使用的是Bokeh 0.12.2,但它与答案中给出的代码略有不同。
这是:
p.xaxis.formatter = FuncTickFormatter(code="""
var mapping = {1.25: "20 000 $", 5.25: "50 000 $"};
return mapping[tick];
""")
正如我过去的问题的评论中所解释的那样,如果Bokeh的版本是0.12.4+,则此代码是正确的。由于我已经在这个项目上工作了几个月,我猜Bokeh在此期间得到了更新,因此我不得不更改代码以使其正常工作。
答案 2 :(得分:0)
--host 参数已弃用,现在使用类似 散景服务 my_app.py --allow-websocket-origin=192.81.213.94 --port=5006