首页 > 解决方案 > Azure 部署重定向(登录无效。请重试。)

问题描述

我已经在 azure 上的 URL 下部署了 Flask Appbuilder 应用程序的基本版本:Site URL。管理员登录已使用 Kudu 控制台创建,ID 为 admin,密码为 admin 登录继续重定向到自身,并显示“登录无效。请重试。” 错误,但是用户存在于 app.db 文件本身中。重定向不会在 Azure 上创建任何日志。

错误部分和日志

我们有一个重要的部署即将到来,任何解决此问题的线索将不胜感激。

谢谢

环境

Flask-Appbuilder 版本:最新

标签: pythonazureiisflask

解决方案


听起来您构建的 Python 应用程序flask-appbuilder已部署在适用于 Windows 的 Azure WebApp 上,但无法正常工作。

对于两个现有的 SO 线程Hosting Flask(Python) app throws CGI errorHosting Flask(python) API on Azure API有我的答案。

我尝试flask-appbuilder在 Python 3 中创建一个演示并将其部署到 Azure WebApp for Windows,然后它工作正常。以下是我的步骤,您可以参考。

  1. 我通过以下命令在我安装了 Python 3 运行时的本地机器上创建了一个虚拟环境,并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
    
  2. 使用所有默认选项和简单密码创建管理员,通过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
    .......
    
  3. 我运行demoappvia fabmanager run,它适用于我的本地。
  4. 然后,我通过 Kudo Consoledemoapp将包含的所有目录和文件拖到我的 Azure WebApp 中。app.dbhttps://<your webapp name>.scm.azurewebsites.net/DebugConsole
  5. 由于没有直接安装应用依赖flash-appbuilder,所以我在 Kudu 中安装了一个 Python 3 运行时Site extensions,如下图。

    在此处输入图像描述

  6. 继续,我回到 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.3MB) 已满足要求:d:\home\python364x86\lib\site-packages 中的 colorama<1,>=0.3.9 -appbuilder) (0.4.1) 已满足要求:在 d:\home\python364x86\lib\site-packages 中单击<8,>=6.7 (来自flask-appbuilder) (7.0) ......

  7. 然后,进入site\wwwroot创建和配置web.config文件并更改run.py. 有两种方法可以使其工作,如下所示。

    • 不使用 WSGI。Azure WebApp 的默认端口取决于HTTP_PLATFORM_PORTIIS 在 Azure 上设置的环境变量。所以我们需要更改方法的port参数并配置如下。app.runrun.pyweb.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 在此处输入图像描述


推荐阅读