这是我第一次将 Flask Web 应用程序部署到 Azure。
我跟着这个tutorial https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-flask-app/.
他们的默认演示应用程序对我来说效果很好。
之后,我通过 git 推送了 Flask 应用程序。日志显示部署成功。但是,当我通过“应用程序属性”中提供的链接浏览托管应用程序时,出现 500 错误,如下所示:
由于服务器内部错误,该页面无法显示
发生。
最可能的原因:IIS收到请求;然而,一个内部
处理请求期间发生错误。根本原因是
此错误取决于哪个模块处理请求以及处理的是什么
发生此错误时发生在工作进程中。 IIS 不是
能够访问网站或应用程序的 web.config 文件。
如果 NTFS 权限设置不正确,则可能会发生这种情况。 IIS 是
无法处理网站或应用程序的配置。这
经过身份验证的用户无权使用此 DLL。这
请求映射到托管处理程序,但 .NET 扩展性
功能未安装。
通过 KUDU 浏览 wwwroot,我看到的唯一不合理的事情是,尽管 wwwroot 中存在“requirements.txt”文件,但我在本地虚拟环境中安装的软件包都没有安装在 Azure 上。
我的理解是,在 GIT 成功推送后,Azure 会 pip 安装在 requests.txt 中找到的任何不存在的包。但这似乎并没有发生在我身上。
我是否做错了什么,丢失的包裹只是一个症状,还是可能是问题的原因?
Notes:
我的 Flask 应用程序在本地(linux)和第 3 方 VPS 上运行良好
我从头开始重新部署了好几次都无济于事(我使用的是本地GIT方法)
我在本地克隆了 Azure Flask 演示应用程序,仅更改了应用程序文件夹并推送回 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
它的危险==0.24 Jinja2==2.8 MarkupSafe==0.23 pycparser==2.14
PyMySQL==0.7.7 python-http-client==1.2.3 六==1.10.0 smtpapi==0.3.1
SQLAlchemy==1.0.14 Werkzeug==0.11.10 WTForms==2.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.
So the .skipPythonDeployment
将跳过部署任务中的所有以下步骤,包括创建虚拟环境。
您可以尝试删除.skipPythonDeployment
从您的应用程序中删除,然后重试。
另外,请参考https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)