2 votes

Flask, Windows, IIS, Plotly-Dash. Erreur survenue lors de la lecture du gestionnaire WSGI

J'espère que vous pourrez m'aider à résoudre les erreurs que j'obtiens avec Flask lorsque je tente de déployer plotly-dash sur un serveur Windows.

J'ai configuré Flask en suivant le guide suivant, mot pour mot, à l'exception de l'emplacement de mon site web dans le dossier wwwroot : Flask sur IIS

Lorsque j'utilise les applications les plus basiques, cela fonctionne bien, par exemple avec le code suivant :

from flask import Flask
app = Flask(__name__)

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

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

Mais ensuite, si j'essaie quelque chose de légèrement plus complexe, comme la démo de base de Dash :

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)

J'obtiens l'erreur suivante (que j'ai essayé de mettre en forme pour faciliter l'interprétation) :

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:

J'ai fait une tonne de recherches sur Internet et j'ai fait de mon mieux pour décoder cette erreur, mais je me heurte à un mur de briques. Quelqu'un a-t-il une idée ?

Suite à la suggestion de @susodapop, j'ai supprimé IPython et j'ai maintenant l'erreur suivante :

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

0voto

susodapop Points 186

Essayez d'utiliser La version bénie de Microsoft de wfastcgi.py et les instructions de configuration qui l'accompagnent. Les anciennes versions de wfastcgi.py avait des problèmes en essayant d'écrire une sortie binaire sur un objet non binaire, ce qui est similaire à ce que vous voyez ici.

Jusqu'à récemment, les instructions disponibles en ligne pour configurer Flask avec IIS étaient toutes un peu confuses. La solution proposée par Microsoft est la plus facile à configurer, sauf si vous utilisez Azure.

0voto

Ryan Boch Points 61

J'ai rencontré des problèmes similaires. Voici les étapes que j'ai suivies pour que cela fonctionne :

1) Assurez-vous qu'il n'y a pas d'espace entre le fichier python.exe, pipe, et wfastcgi.py dans l'exécutable "Add Module Mapping". Voir ce qui suit enlace pour une explication. Cela a déclenché une erreur 500 pour moi.

2) Assurez-vous que vous utilisez l'instance d'application flask au lieu de l'instance d'application dash. Voir Guide de l'utilisateur pour le déploiement de Dash Ceci est réalisé en utilisant app.server au lieu de app.app dans la variable d'environnement WSGI_HANDLER. Captures d'écran dans le lien de 1.

3) Enfin, désinstallez IPython comme indiqué dans les commentaires si vous obtenez l'erreur de la question originale.

Après ces trois numéros. J'ai réussi à déployer mon application Dash sur IIS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X