Ошибка WSGI при переносе приложения Python / Flask из Heroku в Azure

1

Я ударил стену, развернув небольшое приложение Flask к Azure. Приложение работает нормально локально и на Heroku, но возвращает внутреннюю ошибку сервера на Azure. Здесь журнал:

logs.txt

StdErr: 
2018-06-15 22:14:38.239395: Unhandled exception in wfastcgi.py: Traceback (most recent call last):
  File "D:\home\python353x86\wfastcgi.py", line 791, in main
    env, handler = read_wsgi_handler(response.physical_path)
  File "D:\home\python353x86\wfastcgi.py", line 633, in read_wsgi_handler
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
  File "D:\home\python353x86\wfastcgi.py", line 603, in get_wsgi_handler
    handler = getattr(handler, name)
AttributeError: module 'app' has no attribute 'wsgi_app'
2018-06-15 22:14:38.255034: Running on_exit tasks
2018-06-15 22:14:38.270645: wfastcgi.py 3.0.0 closed

Кажется, что проблема связана с конфигурацией WSGI. Это мое первое развертывание Azure, и мне никогда не приходилось много думать о WSGI. В учебнике я использовал Green Unicorn на Heroku, где он был Procfile в Procfile requirements.txt и в Procfile:

PROCFILE

web: gunicorn app:app

requirements.txt

Flask==0.12.2
Flask-Cors==3.0.3
gunicorn==19.7.1

Однако Azure не использует Procfile, и мне непонятно, работает ли даже пулеметный огонь в среде Azure.

Мои вопросы:

  1. Является ли Зеленый Единорог жизнеспособным? Если да, то как его настроить?
  2. Если нет, то каковы мои другие варианты? За сообщения, как это, я попытался добавить wsgi_app = app.wsgi_app строки под app декларации, но это возвращает ошибку, которая приводит меня еще один кроличью нору: TypeError: wsgi_app() missing 2 required positional arguments: 'environ' and 'start_response'

Здесь остальная часть бэкэнда:

app.py

# Dependencies ------------------------
from flask import Flask
from flask_cors import CORS, cross_origin
from flask import render_template
from flask import request
import sqlite3
import json
import os

# Config ------------------------------
app = Flask(__name__)
CORS(app)

# Routes ------------------------------
@app.route("/")
def home():
    # Do stuff

web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="WSGI_HANDLER" value="app.wsgi_app()" />
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
  <add name="Python FastCGI" path="handler.fcgi" verb="*"     modules="FastCgiModule" 
      scriptProcessor="D:\home\python353x86\python.exe|    D:\home\python353x86\wfastcgi.py" 
          resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
        <add input="{REQUEST_URI}" pattern="^/static/.*"     ignoreCase="true" negate="true" />
          </conditions>
      <action type="Rewrite" url="handler.fcgi/{R:1}"     appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

На данный момент я просто слепо копирую/вставляя возможные решения, поэтому я очень благодарен за любую помощь. Благодарю.

Теги:
azure
flask
wsgi
gunicorn

1 ответ

1
Лучший ответ

Попробуйте определить wsgi_app:

app = Flask(__name__)

# define for IIS module registration.
wsgi_app = app.wsgi_app

if __name__ == '__main__':
    app.run()
  • 0
    Те же 500 ошибок. Вот журнал: TypeError: wsgi_app() missing 2 required positional arguments: 'environ' and 'start_response'
  • 2
    Попробуйте изменить <add key="WSGI_HANDLER" value="my_app.wsgi_app()" /> на <add key="WSGI_HANDLER" value="my_app.wsgi_app" /> .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню