Похоже, что ваше приложение Python, созданное flask-appbuilder
, было развернуто в Azure WebApp для Windows, но не работает.
Мои ответы на два существующих SO потока Приложение Hosting Flask (Python)выдает ошибку CGI и API хостинга Flask (python) в API Azure .
Я попытался создать демонстрационную версию с помощью flask-appbuilder
в Python 3 и развернуть ее в Azure WebApp для Windows, то работает нормально.Ниже приведены мои шаги, к которым вы можете обратиться.
Я создаю виртуальную среду для этой демонстрации с помощью приведенных ниже команд на моем локальном компьютере, на которых я установил Python 3 runtime и virtualenv
через pip install virtualenv
.
virtualenv demo
cd demo
bin\activate.bat
pip install flask-appbuilder
fabmanager create-app # use `demoapp` as the `Your new app name` input
cd demoapp
Для создания администратора со всеми параметрами по умолчанию и простым паролем через fabmanager create-admin
.
Username [admin]:
User first name [admin]:
User last name [user]:
Email [admin@fab.org]:
Password:
Repeat for confirmation:
D:\<your path>\demo\demoapp\lib\python3.6\site-packages\flask_sqlalchemy\__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
2019-02-21 15:29:55,309:INFO:flask_appbuilder.security.sqla.manager:Security DB not found Creating all Models from Base
2019-02-21 15:29:55,334:INFO:flask_appbuilder.security.sqla.manager:Security DB Created
.......
- Я запускаю
demoapp
через fabmanager run
и он работает на моем локальном компьютере. - Затем я перетаскиваю все свои каталоги и файлы
demoapp
, которые включают app.db
, в мое Azure WebApp через консоль Kudo https://<your webapp name>.scm.azurewebsites.net/DebugConsole
. Из-за отсутствия прямой установки зависимостей приложения для flash-appbuilder
я установил среду выполнения Python 3 в Site extensions
в Kudu, как показано на рисунке ниже.
Продолжение, я возвращаюсь в консоль Kudu и запускаю команды ниже для установки flask-appbuilder
.
D: \ home> cd python364x64 D: \ home \ python364x64> python -V Python 3.6.4 D: \ home \ python364x64> pip install flask-appbuilder Сборка flask-appbuilder Загрузка https://files.pythonhosted.org/packages/3a/b0/edb3e54241203266222c4863ae6eb30fd49f5d331a117b61f1801e8124da/Flask-AppBuilder-1.12.3.tar.gz (2,3 МБ) Требование уже выполнено: colorama <1,> = 0,3,9 в d: \ home \ python364x86 \ lib \ site-packages (из flask-appbuilder) (0.4.1) Требование уже выполнено:нажмите <8,> = 6,7 в d: \ home \ python364x86 \ lib \ site-packages (из flask-appbuilder) (7.0) ......
Затем, чтобыПерейдите в site\wwwroot
, чтобы создать и настроить файл web.config
и изменить код в run.py
.Есть два способа заставить его работать, как показано ниже.
- Не используется WSGI.Порт по умолчанию Azure WebApp зависит от переменной среды
HTTP_PLATFORM_PORT
, которая устанавливается IIS в Azure.Поэтому нам нужно изменить параметр port
метода app.run
в run.py
и настроить web.config
, как показано ниже.
Код run.py
изменился, как показано ниже:
from app import app
import os
app.run(port=int(os.environ['HTTP_PLATFORM_PORT']))
И содержимое web.config
, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="PYTHONPATH" value="D:\home\site\wwwroot" />
<add key="PATH" value="D:\home\python364x64;D:\home\python364x64\Scripts;%PATH%" />
</appSettings>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="D:\home\python364x64\python.exe" arguments="D:\home\site\wwwroot\run.py --port %HTTP_PLATFORM_PORT%" stdoutLogEnabled="true" startupRetryCount='10'>
</httpPlatform>
</system.webServer>
</configuration>
- Использование сервера WSGI вместо рабочей среды.
Код run.py
, как показано ниже.
from app import app
app.run()
И содержимое web.config
, как показано ниже.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="PYTHONPATH" value="D:\home\site\wwwroot" />
<add key="WSGI_HANDLER" value="app.app" />
</appSettings>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\python364x64\python.exe|D:\home\python364x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>
</configuration>
Работает через доступ https://<your app name>.azurewebsites.net