Reputation: 2024
I am deploying a Dash Application to Heroku. The App works on localhost, however, when attempting to deploy to Heroku, I run the gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
My file structure is something like this:
app.py
index.py
Procfile
requirements.txt
-- Tabs
--- Tab1.py
--- Tab2.py
Procfile contents:
web: gunicorn index:server --workers 4
Error Traceback:
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>
Contents on 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)
Upvotes: 2
Views: 6490
Reputation: 6024
You Procfile indicates that gunicorn should look for the Flask server as a variable named server
in the index.py
file (that's basically what gunicorn index:server
means). However, it seems like you have not defined that variable, i.e. you should add a line like
server = app.server
in your index.py
file (or change your Procfile).
Upvotes: 3