我正在将 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)