1

我正在将 Dash 应用程序部署到 Heroku。该应用程序在 localhost 上运行,但是,当尝试部署到 Heroku 时,我运行gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

我的文件结构是这样的:

app.py
index.py
Procfile
requirements.txt
-- Tabs
--- Tab1.py
--- Tab2.py 

过程文件内容:

web: gunicorn index:server --workers 4

错误回溯:

Traceback (most recent call last):
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 225, in run
       handler()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 260, in handle_term
       raise StopIteration
   StopIteration
   During handling of the above exception, another exception occurred:
   Traceback (most recent call last):
     File "/app/.heroku/python/bin/gunicorn", line 11, in <module>
       sys.exit(run())
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 61, in run
       WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 223, in run
       super(Application, self).run()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/app/base.py", line 72, in run
       Arbiter(self).run()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 228, in run
       self.halt()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 345, in halt
       self.stop()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 393, in stop
       time.sleep(0.1)
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 245, in handle_chld
       self.reap_workers()
     File "/app/.heroku/python/lib/python3.6/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
       raise HaltServer(reason, self.WORKER_BOOT_ERROR)
   gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

index.py 上的内容

import pandas as pd
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
import dash_core_components as dcc
import plotly as py
from plotly import graph_objs as go
from plotly.graph_objs import *
import flask
from app import app
import os
from tabs import reporting, portfolio, market, deal, revenue, comps, analysis

app.layout = html.Div([

    # header
    html.Div([

        html.Div(
            html.Img(src='https:///logo.png',height="100%"),
        ],
        className="row header"
    ),

    # body
    #html.Div(className='background')

    # tabs
    html.Div([

        dcc.Tabs(

            id="tabs",
            vertical=True,
            className="mb-3",
            #style={"height":"60"},
            children=[

                 dcc.Tab(label="Portfolio", value="portfolio_tab"),
                 dcc.Tab(label="Revenue", value="revenue_tab",
                 dcc.Tab(label="Deal", value="deal_tab")

            ],
            value="revenue_tab",
        )

        ],

        className="row tabs_div"

    ),

        # Tab content
        html.Div(id="tab_content"),

       )

])

    # In[9]:
    
    # Render tabs/subtabs
    @app.callback(
                    Output("tab_content", "children"),
    
                  [
                      Input("tabs", "value"),
                      Input("subtabs", "value")
                  ],
                 )
    def render_content(tab, subtab):
        """
        For user selections, return the relevant tab
        """
        if tab == "portfolio_tab":
            return portfolio.layout
    
        if tab == "reporting_tab":
            return reporting.layout
    
        if tab == "market_tab":
            return market.layout
    
        elif tab == "deal_tab":
            return deal.layout
    
        else:
            return (dash.no_update)
    
    # In[10]:
    
    if __name__ == '__main__':
        # Production
        app.run_server(debug=True)
4

1 回答 1

2

你 Procfile 表明 gunicorn 应该寻找 Flask 服务器作为文件中命名的变量serverindex.py这基本上是什么gunicorn index:server意思)。但是,您似乎还没有定义该变量,即您应该添加一行

server = app.server

在您的index.py文件中(或更改您的 Procfile)。

于 2020-08-12T12:16:25.860 回答