无法更新heroku中的散景图

时间:2019-03-19 03:00:44

标签: heroku flask bokeh

我正在创建一个具有散景图的Heroku应用程序,并使用用户输入进行更新。当我运行python代码时,我看到在我的本地目录中图已更新,但是在Heroku应用程序上没有任何变化。这是我的app.py的相对部分:

def graph(sym,yr,month):
    response=requests.get(some_link)
    data=response.json()
    df=pd.DataFrame(data)
    p = figure(plot_width=600, plot_height=400)
    x_axis=[i for i in range(len(df.values))]
    p.line(x_axis,df['4. close'].iloc[::-1], line_width=2)
    output_file('templates\image.html')
    save(p)

app = Flask(__name__)

@app.route('/')
def index_lulu():
    return render_template('stockticker.html')

@app.route('/static/<path:path>',methods=['GET','POST'])
def static_file(path):
    return app.send_static_file(os.path.join('static', path))

@app.route('/image.html',methods=['GET','POST'])
    def hello3():
    symbol=request.form['symbol_lulu']
    year=request.form['year_lulu']
    month=request.form['month_lulu']
    graph(symbol,year,month)
    return render_template('image.html')

if __name__ == "__main__":
    app.run(debug=False)

stockticker.html接受符号,年,月的输入。当我在终端上运行app.py时,image.html会不断更新,但是当我在Heroku上部署它时,它总是显示相同的图。我是这个领域的新手,我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您的直接问题很有可能与您使用的路径名有关。检查您的日志,看看那里是否有有趣的错误消息。

但是,即使您做到了,它也可能无法达到您的期望。 Heroku的文件系统is ephemeral。您对它所做的任何更改都将在下次您的dyno重新启动时丢失,每次happens frequently(每天至少一次)。您无法将文件保存到文件系统并期望它们保留在那里。

Heroku的official recommendation是我们的第三方服务,例如Amazon S3,用于存储用户上传的内容,动态生成的文件等。这也是常规静态文件的好地方。

(在这种情况下,由于您是在每次加载视图时都创建文件,因此也许可以使它正常工作。但是将生成的图像缓存一定时间可能更有效,并且您可以不能在Heroku的文件系统上可靠地做到这一点。)