簡體   English   中英

Heroku 部署后,Dash / Flask 應用程序中的內容未刷新

[英]Content not refreshing in Dash / Flask app after Heroku deployment

我有一個嵌入在 Flask 應用程序中的 Dash 儀表板。 該應用程序使用 Heroku Container Registry 部署在 Heroku 上。

python 腳本 ( get_data.py ) 使用 Heroku Scheduler 每 10 分鍾運行一次。 此腳本調用 Yahoo Finance API 獲取數據,創建圖表並將其保存為image.png (注意:舊圖像被新文件覆蓋)。 Heroku 調度器工作:

python app-folder/get_data.py 

預期的行為是在瀏覽器刷新時當划線間隔組件每 N 秒更新一次內容時顯示新圖像。

這在本地有效。 當我在本地運行應用程序並手動調用get_data.py ,新的image.png會在瀏覽器刷新時顯示,或者當 Dash 間隔組件定期觸發回調以返回新圖像時。 這是我在本地運行應用程序時刷新數據的方式:

docker-compose run website bash -c "python app-folder/get_data.py"

這可能是由於服務器返回緩存/過時的響應,還是對 Heroku 有某種我不知道的限制?

編輯:為清楚起見,更新image.png后不會重新啟動應用程序。

這是 Dash 儀表板,但我認為這不是問題所在:

url_base = '/plotlydash/'


def create_dashboard(server):
    dash_app = dash.Dash(
        server=server,
        routes_pathname_prefix=url_base,
        )

    def serve_layout():
        """
        App.layout to a function so it can serve a dynamic layout on
        every page load.

        By default, Dash apps store the app.layout in memory. This 
        ensures that the layout is only computed once at start - 
        Don't want this!
        """
        return html.Div([

            html.Div(id='image-div', children=[]),

            dcc.Interval(
                id='interval-component',
                interval=6*10000, # 10 seconds
                n_intervals=0
            )
        ])

    dash_app.layout = serve_layout

    @dash_app.callback(Output('image-div', 'children'),
                    [Input('interval-component', 'n_intervals')])

    def update_image(n):
        img_path = "app-folder/static/images/image.png"
        encoded_image = base64.b64encode(
            open(img_path, 'rb').read())
    
        return html.Img(src='data:image/png;base64,{}'\
            .format(encoded_image.decode()), style={"height": "600px"})

    return dash_app.server

無法定位新文件的原因似乎是因為Heroku 有一個“臨時”硬盤驅動器,這意味着在 Heroku 上部署容器時,新上傳的文件不會保留在磁盤上。

正如 Heroku 所建議的,解決方案不是將上傳的文件存儲到磁盤,而是利用雲文件存儲服務,例如 Amazon 的 S3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM