这是我第一次将Flask Web应用程序部署到Azure。 我跟着这个tutorial。
他们的默认演示应用程序对我来说很好。
之后,我通过git推送了我的Flask应用程序。日志显示部署成功。但是,当我通过“应用程序属性”中提供的链接浏览托管应用程序时,我收到500错误,如下所示:
由于内部服务器错误,页面无法显示 发生。
最有可能的原因:IIS收到了请求;但是,一个内部 处理请求期间发生错误。根本原因 此错误取决于哪个模块处理请求以及什么是 发生此错误时发生在工作进程中。 IIS不是 能够访问网站或应用程序的web.config文件。 如果NTFS权限设置不正确,则会发生这种情况。 IIS是 无法处理网站或应用程序的配置。该 经过身份验证的用户无权使用此DLL。该 请求映射到托管处理程序,但.NET可扩展性 功能未安装。
我通过KUDU浏览wwwroot可以看到的唯一一个非基础的东西是我在本地虚拟环境中安装的软件包都没有安装在Azure上,尽管wwwroot中存在“requirements.txt”文件。
我的理解是,在GIT成功推送后,Azure将会安装在requirements.txt中找到的任何不存在的软件包。但它似乎并没有发生在我身上。
我做错了什么,丢失的包只是一个症状,还是可能是问题的原因?
注意:
我的Flask应用程序在本地(linux)和第三方VPS上工作正常
我从头开始多次重新部署无效(我使用本地GIT方法)
我在本地克隆了Azure Flask演示应用程序,只更改了app文件夹并推回到Azure,但没有成功。
Azure设置为Python 2.7,与本地虚拟环境相同
正如上面链接的教程中所建议的,我删除了“env”文件夹并重新部署以欺骗Azure以重新安装虚拟环境。它确实使用了自己的默认包而不是我的requirements.txt中的那个。
我的requirements.txt包含以下内容:
bcrypt == 3.1.0 cffi == 1.7.0 click == 6.6 Flask == 0.11.1 Flask-Bcrypt == 0.7.1 Flask-Login == 0.3.2 Flask-SQLAlchemy == 2.1 Flask-WTF == 0.12 itsdangerous == 0.24 Jinja2 == 2.8 MarkupSafe == 0.23 pycparser == 2.14 PyMySQL == 0.7.7 python-http-client == 1.2.3 six == 1.10.0 smtpapi == 0.3.1 SQLAlchemy == 1.0.14 Werkzeug == 0.11.10 WTForms == 2.1
答案 0 :(得分:1)
Azure Web Apps将运行deploy.cmd
脚本作为部署任务,以控制在部署期间将运行哪些命令或任务。
您可以使用Azure-CLI azure site deploymentscript --python
命令获取python应用程序的部署任务脚本。
您可以在此deploy.cmd
sciprt中找到以下脚本:
IF NOT EXIST "%DEPLOYMENT_TARGET%\requirements.txt" goto postPython
IF EXIST "%DEPLOYMENT_TARGET%\.skipPythonDeployment" goto postPython
echo Detected requirements.txt. You can skip Python specific steps with a .skipPythonDeployment file.
因此.skipPythonDeployment
将跳过部署任务中的所有以下步骤,包括创建虚拟环境。
您可以尝试从应用中删除.skipPythonDeployment
,然后重试。
此外,请参阅https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script以获取更多信息。