Flask, Windows, IIS, Plotly-Dash. Error Occured While reading WSGI handler

巧了我就是萌 提交于 2021-02-08 02:20:33

问题


I'm hoping you can help me with errors that I'm getting with Flask in an attempt to deploy plotly-dash on a Windows server.

I've set up Flask using the following guide, verbatim, except the location of my website within the wwwroot folder: Flask on IIS

When I use the most basic of apps, it works fine, an example being the following code:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from FastCGI via IIS!"

if __name__ == "__main__":
    app.run()

But then if I try something slightly more complex, like the basic Dash demo:

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

app.layout = html.Div(children=[
    html.H1(children='Hello Dash'),

    html.Div(children='''
        Dash: A web application framework for Python.
    '''),

    dcc.Graph(
        id='example-graph',
        figure={
            'data': [
                {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
                {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
            ],
            'layout': {
                'title': 'Dash Data Visualization'
            }
        }
    )
])

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

I get an error as follows (which I've tried to tidy up for ease of interpretation):

Error occurred while reading WSGI handler: 
Traceback (most recent call last): 
    File "C:\inetpub\wwwroot\wfastcgi.py", line 791, in main env, handler = read_wsgi_handler(response.physical_path) 
    File "C:\inetpub\wwwroot\wfastcgi.py", line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) 
    File "C:\inetpub\wwwroot\wfastcgi.py", line 600, in get_wsgi_handler handler = __import__(module_name, fromlist=[name_list[0][0]]) 
    File ".\app.py", line 1, in import dash 
    File "C:\Python36\lib\site-packages\dash\__init__.py", line 1, in from .dash import Dash # noqa: F401 
    File "C:\Python36\lib\site-packages\dash\dash.py", line 12, in import plotly 
    File "C:\Python36\lib\site-packages\plotly\__init__.py", line 31, in from plotly import (plotly, dashboard_objs, graph_objs, grid_objs, tools, 
    File "C:\Python36\lib\site-packages\plotly\plotly\__init__.py", line 10, in from . plotly import ( 
    File "C:\Python36\lib\site-packages\plotly\plotly\plotly.py", line 30, in from plotly import exceptions, files, session, tools, utils 
    File "C:\Python36\lib\site-packages\plotly\tools.py", line 59, in ipython_core_display = optional_imports.get_module('IPython.core.display') 
    File "C:\Python36\lib\site-packages\plotly\optional_imports.py", line 23, in get_module return import_module(name) 
    File "C:\Python36\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) 
    File "C:\Python36\lib\site-packages\IPython\__init__.py", line 55, in from .terminal.embed import embed 
    File "C:\Python36\lib\site-packages\IPython\terminal\embed.py", line 15, in from IPython.core.interactiveshell import DummyMod, InteractiveShell 
    File "C:\Python36\lib\site-packages\IPython\core\interactiveshell.py", line 61, in from IPython.utils import io 
    File "C:\Python36\lib\site-packages\IPython\utils\io.py", line 95, in stdin = IOStream(sys.stdin, fallback=devnull) 
    File "C:\Python36\lib\site-packages\IPython\utils\io.py", line 39, in __init__ for meth in filter(clone, dir(stream)): 
    File "C:\Python36\lib\site-packages\IPython\utils\io.py", line 38, in clone return not hasattr(self, meth) and not meth.startswith('_') 
    File "C:\Python36\lib\site-packages\IPython\utils\io.py", line 82, in closed return self.stream.closed 
    ValueError: underlying buffer has been detached StdOut: StdErr:

I've done a ton of googling and tried my best to decode this error, but I'm hitting a brick wall. Does anyone have any ideas?

Following on from the suggestion by @susodapop I've removed IPython and now got the following error:

Error occurred: Traceback (most recent call last): File "C:\inetpub\wwwroot\wfastcgi.py", line 847, in main result = handler(record.params, response.start) 
TypeError: 'Dash' object is not callable StdOut: StdErr: C:\Python34\lib\site-packages\plotly\tools.py:103: UserWarning: Looks like you don't have 'read-write' permission to your 'home' ('~') directory or to our '~/.plotly' directory. 
That means plotly's python api can't setup local configuration files. No problem though! You'll just have to sign-in using 'plotly.plotly.sign_in()'. For help with that: 'help(plotly.plotly.sign_in)'. Questions? Visit https://support.plot.ly 

回答1:


Try using Microsoft's blessed version of wfastcgi.py and its accompanying configuration instructions. Older versions of wfastcgi.py had issues with trying to write binary output to a non-binary object, which is similar to what you're seeing here.

Until recently, the instructions available online for configuring Flask with IIS were all a bit confusing. Microsoft's own solution is the easiest to configure unless you're using Azure.




回答2:


I ran into similar issues. Here are the steps I ran to get this to work:

1) Ensure there is no spaces between the python.exe, pipe, and wfastcgi.py file in the "Add Module Mapping" Executable. See this link for explanation. This threw a 500 error for me.

2) Ensure you are using the flask app instance instead of the dash app instance. See Dash Deployment User Guide This is accomplished by using app.server instead of app.app in the WSGI_HANDLER environment variable. Screenshots in link from 1.

3) Lastly, uninstall IPython as indicated in comments if you get the error from the original question.

After these three issues. I got my dash app to deploy on IIS.



来源:https://stackoverflow.com/questions/49814358/flask-windows-iis-plotly-dash-error-occured-while-reading-wsgi-handler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!