Flask, wfastcgi и IIS в Windows Server 2012
Я пытаюсь развернуть службу фляги на IIS в Windows Server 2012. Чтобы прийти к этому моменту:
- pip колба (Python версий 2.7 и 3 уже были установлены.)
- Пип установленный wfastcgi
- Побежал wfastcgi-включить
- Создан новый сайт под IIS
- Добавлен обработчик для wfastcgi
- Модифицированный Web.config
Запуск с localhost возвращает ожидаемый результат. Тем не менее, когда я захожу на сайт с sitename, возвращается следующая ошибка (пути не указаны):
Error occurred while reading WSGI handler:
Traceback (most recent call last):
File "wfastcgi.py", line 791, in main
env, handler = read_wsgi_handler(response.physical_path)
File "wfastcgi.py", line 633, in read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "wfastcgi.py", line 586, in get_wsgi_handler
raise Exception('WSGI_HANDLER env var must be set')
Exception: WSGI_HANDLER env var must be set
Это относится как к серверу, так и к другому компьютеру в домене. Кажется, что когда приложение запрашивается из чего-либо, кроме localhost, среда недоступна. Ничего не записывается в журнал wfastcgi.
Я включил app.py
а также Web.config
ниже. Я опустил scriptProcessor
путь здесь, но он установлен на значение, возвращаемое из wfastcgi-enable.
При запуске с локального хоста среда доступна. Как сделать среду доступной для приложения при вызове за пределами locahost?
app.py
from flask import Flask
myapp = Flask(__name__)
@myapp.route("/hello")
def hello():
return "Hello from flask!"
if __name__ == "__main__":
myapp.run(port=8080)
Web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="app.myapp" />
<add key="PYTHONPATH" value="c:/inetpub/wwwroot/flask-services/" />
<add key="WSGI_LOG" value="C:/TMP/logs/app.log" />
</appSettings>
<system.webServer>
<handlers>
<add name="python-wfastcgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="[Omitted]" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
3 ответа
Недавно у нас была похожая проблема с IIS 7, Flask 0.12 и Python 3.6.4. Ваш web.config
выглядит хорошо. Две рекомендации:
- Использовать
virtualenv
для вашего скриптового процессора - Дважды проверьте в IIS, что IIS_IUSRS и IUSR имеют разрешения на изменение папок в вашем пути Python.
вы также можете добавить переменную окружения в настройки wfastcgi, как показано ниже:
PYTHONPATH:(путь python в виртуальной среде)
WSGI_HANDLER:(вашеприложение.приложение)
У меня была такая же ошибка, добавленная в web.config
<appSettings>
<!-- Required Settings -->
<add key="WSGI_HANDLER" value="uploader.wsgi.application" />
<add key="WSGI_LOG" value="C:\call-uploader-backend\Logs\my_app.log" />
<add key="PYTHONPATH" value="C:\call-uploader-backend\uploader\" />
<!-- Optional settings -->
<add key="DJANGO_SETTINGS_MODULE" value="uploader.settings" />
</appSettings>