alexr
alexr

Reputation: 70

Deploying Dash app on Apache using mod_wsgi

I am trying host a simple dash application as a test using Apache and mod_wsgi. However, the page isn’t loading and seems to be stuck in a loop of redirects.

This Flask deployment tutorial has been followed: https://flask.palletsprojects.com/en/1.1.x/deploying/mod_wsgi/

This mod_wsgi configuration tutorial has been followed and the simple WSGI application works as expected: https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html

The issue arises when replacing the simple WSGI application with the dash files. The dash application runs as expected locally. There are no error messages, the page just doesn't load.

This is the apache config file:

WSGIDaemonProcess dash socket-user=aroth user=aroth group=apache threads=5 home=/home/aroth/public_html/test2/ python-path=/home/aroth/.local/lib/python3.6/site-packages
    WSGIScriptAlias /dash/aroth/test2/ /home/aroth/public_html/test2/test2.wsgi
 
    <Directory /home/aroth/public_html/test2>
      AssignUserID aroth apache
      WSGIProcessGroup dash
      WSGIApplicationGroup %{GLOBAL}
      Options FollowSymLinks Indexes
      Require all granted
    </Directory>

test2.wsgi

from test import server as application

test.py (this is an example dash application taken from here http://dash-docs.herokuapp.com/deployment)

import dash
import dash_core_components as dcc
import dash_html_components as html

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

server = app.server

app.layout = html.Div([
    html.H2('Hello World'),
    dcc.Dropdown(
        id='dropdown',
        options=[{'label': i, 'value': i} for i in ['LA', 'NYC', 'MTL']],
        value='LA'
    ),
    html.Div(id='display-value')
])

@app.callback(dash.dependencies.Output('display-value', 'children'),
              [dash.dependencies.Input('dropdown', 'value')])
def display_value(value):
    return 'You have selected "{}"'.format(value)

if __name__ == '__main__':
    app.run_server(debug=True)

Upvotes: 1

Views: 3017

Answers (1)

Poseidon
Poseidon

Reputation: 1

As stated here, try the following:

  1. Add the requests_pathname_prefix parameter if necessary.

app = dash.Dash(__name__, external_stylesheets=external_stylesheets, requests_pathname_prefix='/hello/')

  1. Do NOT reassign the server variable. Instead, your test2.wsgi file should look as follows:

    from test import app application = app.server

After quite some struggle, this eventually did the trick for me.

Upvotes: 0

Related Questions