Heroku上托管的Flask应用在我的计算机上显示了Bokeh图,但在其他任何计算机上却没有

时间:2019-06-17 02:34:05

标签: python heroku flask

我不熟悉Flask,并且在Heroku上托管应用程序。我编写了一个相当简单的Flask应用程序,当我将其托管在Heroku上并转到应用程序URL时,它将在我的计算机上正确显示Bokeh图。但是,当我从任何其他计算机访问应用程序URL时,该应用程序会正常加载(没有错误),但不会显示该图。甚至散景图的边界也丢失了。您可以从下拉菜单中选择其他城市,然后URL会相应更改,但不会显示任何图。

我试图弄清楚API调用是问题还是HTML文件,但是据我所知,这都不是我的系统所特有的。我还尝试使用在网上找到的建议来修改Procfile,但没有一个改变了此行为。

编辑:我已经弄清楚了问题所在。我将在下面详细说明该问题(和解决方案),因此,如果其他任何人遇到相同的问题,他们都可以看到相同的解决方案是否适用于他们。

至少对我来说,问题出在我的html文件中。我将其包含在下面。

<html>
<head>
<link
    href="http://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.css" 
    rel="stylesheet" type="text/css">
<link
    href="http://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.css"
    rel="stylesheet" type="text/css">

<script src="http://cdn.pydata.org/bokeh/release/bokeh-0.12.13.min.js"></script>
<script src="http://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.13.min.js"></script>

</head>
<body>
<H1>Cuisine Histogram</H1>

<form action="/">
<select name="zip_code">
    {% for feature in list_of_zips %}
        {% if feature == zip_code %}
            <option selected value="{{ feature }}">{{ feature }} . 
 </option> 
        {% else %} 
            <option value="{{ feature }}">{{ feature }}</option> 
        {% endif %}
    {% endfor %}
</select>
<input type="submit">
</form>

{{ script|safe }}
{{ div|safe }}

</body>
</html>

事实证明,如果将引用和脚本调用从http更改为https,则可以从任何计算机正确显示绘图。显然,在pydata页面的后台,这些呼叫被默默地拒绝了。更改为https允许他们通过。

1 个答案:

答案 0 :(得分:0)

事实证明,将对bokeh脚本的调用从http更改为https可以解决此问题。将链接更改为https后,该图将在我的系统以及许多其他计算机上的所有浏览器上正确显示。显然,这些呼叫可能在后台被默默地拒绝,因此为什么没有错误,但是应该有一个大的空白区域。