Приложение Flask получает ошибку 0x8007000d с IIS

#flask #iis

#flask #iis

Вопрос:

Я пытаюсь заставить очень простое приложение flask работать на IIS 10, работающем на Windows Server 2019. Я следовал инструкциям обработчика HTTPPlatform от: https://docs.microsoft.com/en-us/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019

Но я продолжаю получать ошибки HTTP 500.19 с кодом ошибки 0x8007000d. Из поиска в Google я подозреваю, что проблема в моем web.config, но я не знаю, что не так. Приложение отлично работает из командной строки. Это мой web.config:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="D:python39python.exe"
                  arguments="D:inetpubwwwrootflasktest.py"
                  stdoutLogEnabled="true"
                  stdoutLogFile="d:logspython.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="9010" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration> 

Это мой app.py:

 from flask import Flask, render_template

app = Flask(__name__)
#app.debug = True

@app.route("/", methods=('GET', 'POST'))
def home():
  return render_template('main.html', hello = 'hello world')

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=9010)
 

это мой main.html

 {% extends 'layout.html' %}
{% block content %}
  <div class="container">
    <div class="leftrow1">
      {{ hello }}
    </div>
    <div class="leftrow2">
    </div>
    <div class="leftrow3">
    </div>
    <div class="leftrow4">
    </div>

    <div class="main_frame_1">
    </div>
    <div class="main_frame_2">
    </div>
  </div>
{% endblock content %} 

и это layout.html

 <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="/static/css/style.css"/>
</head>
<body>
  {% block content %} 
  {% endblock content %}
</body> 

Обновление: на основе полученных комментариев добавлена дополнительная информация об ошибке
Это ошибка, которую я получаю (без установки httpplatformhandler), в журнале событий ничего нет, когда это происходит:
сообщение об ошибке 500.19
Это ошибка, которую я получаю после установки httpplatformhandler:
сообщение об ошибке 500.3
с сообщением 500.3 я также получаю кучу событий 1000 от HttpPlatformHandler в журнале событий:
введите описание изображения здесь

Комментарии:

1. Загрузите и установите HttpPlatformHandler, пожалуйста iis.net/downloads/microsoft/httpplatformhandler

2. Можете ли вы показать мне подробную информацию о вашей странице ошибок? или вы можете попробовать использовать отслеживание неудачных запросов для просмотра конкретного подробного сообщения об ошибке.

3. одно из предложений, которые я нашел при поиске в Google 0x80070057 ( github.com/aspnet/Hosting/issues/866 ) состоял в том, чтобы удалить httpplatformhandler, потому что в .net core он запечен (у меня .net core 3.1.6). Итак, я не уверен, какой путь продолжить, с установкой httpplatformhandler или без него.

4. Вы когда-нибудь исправляли эту проблему? Я сталкиваюсь с той же проблемой, пытаясь заставить простое приложение flask работать с httpPlatformHandler

Ответ №1:

Похоже, у вас нет правильного разрешения на доступ D:python39python.exe и D:inetpubwwwrootflasktest.py .

  1. Откройте диспетчер IIS -> Выберите сайт, на который вы добавили HttpPlatformHandler
  2. Щелкните Сопоставления обработчиков в представлении объектов -> выберите HttpPlatformHandler
  3. Нажмите Изменить разрешение функции на панели действий
  4. Убедитесь, что у вас есть разрешение на выполнение

Комментарии:

1. Я пробовал это, но все равно получал ошибку 500.3

2. В вашем журнале событий я обнаружил, что опубликованное вами изображение является общей информацией, можете ли вы показать мне подробную информацию?

3. единственное, что кажется «<EventData> <Data> Процесс ‘0’ не удалось запустить. Порт = 22700, код ошибки = ‘-2147024809’.</Data> </EventData> </Event>»

4. Убедитесь, что IIS_IUSRS имеет права доступа python39 и wwwroot. Если это не устраняет проблему, попробуйте использовать неудачную трассировку запросов.