已部署的散景服务器显示空白图,但本地一切正常

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