已部署的散景服务器显示空白图,但本地一切正常
A deployed bokeh server displays a blank plot, but everything is fine locally
我正在尝试将 Bokeh 应用程序部署到通用 Internet,但即使小部件和 div 正确呈现,实际情节也根本没有显示。
我进行了一些搜索,发现 Whosebug 上的这个最近 似乎与我的问题相似,但我不确定我的应用是否发生了同样的事情。此外,我不太了解建议的解决方案。
此外,当我使用命令 bokeh serve --show /path/myapp.py
在本地 运行 应用程序时,一切 运行 都很好。
谁能赐教一下?我加入了 Chrome 控制台的图像。
谢谢!
编辑
我试图用 AWS 复制这种情况。我从 EC2 实例上传了我的 .py 应用程序和 运行 bokeh serve app.py --port=80 --host='*'
。我有同样的问题,除了情节本身,一切都在那里。这表明代码本身有问题。
我在服务器 运行ning Ubuntu 16.04.1 LTS(xenial) 中使用 apache 版本 2.4.18,我正在使用 reverse-proxying 测试一个简单的散景服务器应用程序.经过反复试验,我发现以下配置适合我。我需要 reverse-proxying 才能正常工作。要启动我使用的服务器:
bokeh serve my_app.py --port XXXX --host NAMEOFSERVER:80 --prefix SOMEPREFIX
为此,我在 /etc/apache2/sites-available
文件夹中创建了一个 bokehserver.conf
文件,配置如下:
<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 服务器部分。
正如我之前在编辑中提到的,实际问题是服务器本身不喜欢。我的 .py 文件中的一些代码导致浏览器不显示绘图。
这是有问题的代码:
p.xaxis.formatter = FuncTickFormatter(code="""
function (tick) {
var mapping = {1.25: "20 000 $", 5.25: "50 000 $"};
return mapping[tick];
};
""")
当我把这部分注释掉的时候,剧情突然出现了。知道为什么这会导致问题吗?
为了记录,我把这个块放在那里是因为我只需要 x-axis 上的两个刻度,我希望它们显示未链接到数据的特定数字。
编辑
我找到了导致这种情况的原因:语法。它链接到 。上面的代码对我有用,因为我使用的是 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 在此期间得到了更新,所以我不得不更改代码以使其工作。
--主机参数已弃用,现在使用类似
散景服务 my_app.py --allow-websocket-origin=192.81.213.94 --port=5006
我正在尝试将 Bokeh 应用程序部署到通用 Internet,但即使小部件和 div 正确呈现,实际情节也根本没有显示。
我进行了一些搜索,发现 Whosebug 上的这个最近
此外,当我使用命令 bokeh serve --show /path/myapp.py
在本地 运行 应用程序时,一切 运行 都很好。
谁能赐教一下?我加入了 Chrome 控制台的图像。
谢谢!
编辑
我试图用 AWS 复制这种情况。我从 EC2 实例上传了我的 .py 应用程序和 运行 bokeh serve app.py --port=80 --host='*'
。我有同样的问题,除了情节本身,一切都在那里。这表明代码本身有问题。
我在服务器 运行ning Ubuntu 16.04.1 LTS(xenial) 中使用 apache 版本 2.4.18,我正在使用 reverse-proxying 测试一个简单的散景服务器应用程序.经过反复试验,我发现以下配置适合我。我需要 reverse-proxying 才能正常工作。要启动我使用的服务器:
bokeh serve my_app.py --port XXXX --host NAMEOFSERVER:80 --prefix SOMEPREFIX
为此,我在 /etc/apache2/sites-available
文件夹中创建了一个 bokehserver.conf
文件,配置如下:
<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 服务器部分。
正如我之前在编辑中提到的,实际问题是服务器本身不喜欢。我的 .py 文件中的一些代码导致浏览器不显示绘图。
这是有问题的代码:
p.xaxis.formatter = FuncTickFormatter(code="""
function (tick) {
var mapping = {1.25: "20 000 $", 5.25: "50 000 $"};
return mapping[tick];
};
""")
当我把这部分注释掉的时候,剧情突然出现了。知道为什么这会导致问题吗?
为了记录,我把这个块放在那里是因为我只需要 x-axis 上的两个刻度,我希望它们显示未链接到数据的特定数字。
编辑
我找到了导致这种情况的原因:语法。它链接到
这里是:
p.xaxis.formatter = FuncTickFormatter(code="""
var mapping = {1.25: "20 000 $", 5.25: "50 000 $"};
return mapping[tick];
""")
正如我在过去的问题的评论中所解释的那样,如果 Bokeh 的版本是 0.12.4+,则此代码是正确的。由于我已经在这个项目上工作了几个月,我想 Bokeh 在此期间得到了更新,所以我不得不更改代码以使其工作。
--主机参数已弃用,现在使用类似 散景服务 my_app.py --allow-websocket-origin=192.81.213.94 --port=5006