Azure Flask Deployment – WSGI-Schnittstelle

Ich arbeite derzeit durch das Buch Flask Web Development, die Entwicklung von Web-Anwendungen mit Python und ich habe derzeit einige Fragen, wo ich die WSGI-Schnittstelle platzieren sollte, damit ich es auf einem Azure Web Service bereitstellen kann. Als Referenz bin ich derzeit in Kapitel 7 und eine Kopie dieses Codes, die ich derzeit durcharbeiten, finden Sie unter https://github.com/miguelgrinberg/flasky/tree/7a

Um zu versuchen und herauszufinden, wo das Problem ist, habe ich einen Test Azure Cloud Service mit Flasche in Visual Studio erstellt, der perfekt im Azure Emulator läuft. Der folgende Code ist eine Kopie der app.py-Datei.

""" This script runs the application using a development server. It contains the definition of routes and views for the application. """ from flask import Flask app = Flask(__name__) # Make the WSGI interface available at the top level so wfastcgi can get it. wsgi_app = app.wsgi_app @app.route('/') def hello(): """Renders a sample page.""" return "Hello World!" if __name__ == '__main__': import os HOST = os.environ.get('SERVER_HOST', 'localhost') try: PORT = int(os.environ.get('SERVER_PORT', '5555')) except ValueError: PORT = 5555 app.run(HOST, PORT) 

Die Schlüssellinie hier ist die Deklaration des Attributs wsgi_app, das von wfastcgi abgeholt wird. Allerdings, wenn ich versuche, diese in den folgenden Code ( manage.py als Referenz) einfügen und ändern Sie es etwas, um mit den Test-Projekt-Einstellungen laufen

 #!/usr/bin/env python import os from app import create_app, db from app.models import User, Role from flask.ext.script import Manager, Shell from flask.ext.migrate import Migrate, MigrateCommand app = create_app(os.getenv('FLASK_CONFIG') or 'default') manager = Manager(app) migrate = Migrate(app, db) def make_shell_context(): return dict(app=app, db=db, User=User, Role=Role) manager.add_command("shell", Shell(make_context=make_shell_context)) manager.add_command('db', MigrateCommand) @manager.command def test(): """Run the unit tests.""" import unittest tests = unittest.TestLoader().discover('tests') unittest.TextTestRunner(verbosity=2).run(tests) # Make the WSGI interface available at the top level so wfastcgi can get it. wsgi_app = app.wsgi_app if __name__ == '__main__': HOST = os.environ.get('SERVER_HOST', 'localhost') try: PORT = int(os.environ.get('SERVER_PORT', '5555')) except ValueError: PORT = 5555 app.run(HOST, PORT) 

Ich empfange den folgenden Fehler, wenn ich versuche, es in einem Azure Emulator laufen zu lassen.

 AttributeError: 'module' object has no attribute 'wsgi_app' 

Ich vermute, dass ich nicht die wsgi_app Variable in die richtige Position, aber ich kann nicht herausfinden, wo genau ich es setzen sollte.

Jede Hilfe wäre sehr dankbar.

3 Solutions collect form web for “Azure Flask Deployment – WSGI-Schnittstelle”

Haben Sie darüber nachgedacht, eine Web-App zu verwenden, um Flask aufzurufen und zu laufen? Hier finden Sie einen umfassenden Leitfaden für die Bereitstellung von Flask auf einer Web-App: https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-flask-app/

Es wird automatisch Sie mit einer Website und behandeln die web.config und schnelle cgi Skripte.

Ich baute einen Test Azure Cloud Service mit Flasche, versuchte, dein Problem zu reproduzieren, zum Glück fand ich das Problem.

Ich kopierte relative Pakete zu meinem Testprojekt, das gefunden, wenn die Eintrittsdatei im Root-Verzeichnis mit app.py , würde es bei dir denselben Fehler geben. Aber ich habe die Datei manage.py Das Projekt hat gut manage.py .

Nach meinem Verständnis, vielleicht die Eintrittsdatei app.py und das Paket namens App wäre in Konflikt für die Zuordnung.

Nach ein bisschen beunruhigender Aufnahmen konnte ich eine Lösung für mein Problem finden, war aber leider nicht in der Lage, genau zu isolieren, was schief gelaufen ist.

Grundsätzlich ging ich durch den Prozess des Wiederaufbaus meines Testprojekts von Grund auf in VS2015 (Python -> Azure Cloud Service -> Flask Web Role) und war irgendwie dieses Mal in der Lage, eine funktionierende Lösung mit dem 7a Testprojekt zu bekommen, mit dem es in der Azur läuft Emulator gefolgt von der erfolgreichen Veröffentlichung als Azure Web App.

Ich glaube, mein Problem könnte aus einer der folgenden Fragen resultieren:

  • Die request.txt-Datei war höchstwahrscheinlich nicht aktuell. Beachten Sie, dass, wenn Sie den Azure Simulator ausführen, überprüft es die requirements.txt-Datei und aktualisiert / installiert alle Bibliotheken, die Sie derzeit nicht in Ihrer Python-Umgebung installiert haben (ohne Eingabeaufforderung).
  • Ich habe möglicherweise nicht die Datei ConfigureCloudService.ps1 oder ps.cmd im Ordner bin im Flask Worker Role Project. (Es lohnt sich auch, die Readme.mht-Datei zu lesen, wenn Sie irgendwelche Probleme ausführen)
  • Ich habe auch die Basis der Datei manage.py geändert:

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

Was auch geholfen hat.

Ich hoffe, das hilft jedem anderen, der in ein ähnliches Problem laufen kann.

Python ist die beste Programmiersprache der Welt.