python - 无法将简单的烧瓶应用程序部署到 azure Web 应用程序
问题描述
我正在尝试将一个非常简单的烧瓶应用程序部署到 linux azure web 应用程序,但似乎找不到任何已安装的软件包
它使用虚拟环境在本地主机上工作
这是文件夹 startup.py 上的应用程序代码:
from flask import Flask
from flask_restful import Resource, Api
class Index(Resource):
def get(self):
return "Hellow World"
app = Flask(__name__)
api = Api(app)
api.add_resource(Index, "/home")
我正在尝试使用 azure DevOps 管道部署应用程序,这是我的 azure-pipeline.yml 文件(我删除了这篇文章的变量)
variables:
ConnectedServiceName: <name of my service connection>
WebAppName: <name of my web app>
pool:
name: Hosted Ubuntu 1604
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.6'
architecture: 'x64'
- script: pip install -r requirements.txt
displayName: 'Install requirements'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.SourcesDirectory)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/Application$(Build.BuildId).zip'
replaceExistingArchive: true
#verbose: # (no value); this input is optional
- task: AzureRMWebAppDeployment@4
displayName: Azure App Service Deploy
inputs:
appType: webAppLinux
RuntimeStack: 'PYTHON|3.6'
ConnectedServiceName: $(ConnectedServiceName)
WebAppName: $(WebAppName)
Package: '$(Build.ArtifactStagingDirectory)/Application$(Build.BuildId).zip'
StartupCommand: 'gunicorn --bind=0.0.0.0 --workers=4 startup:app'
这是我的 requirements.txt 文件
aniso8601==7.0.0
astroid==2.2.5
Click==7.0
colorama==0.4.1
Flask==1.1.1
Flask-JWT-Extended==3.22.0
Flask-RESTful==0.3.7
flask-swagger-ui==3.20.9
管道运行所有步骤且没有错误 部署映像
但似乎 wwwroot 文件夹中没有包
/home>cd site/wwwroot
/home/site/wwwroot>pip freeze
virtualenv==16.6.2
/home/site/wwwroot>
还尝试pip install -r requirements.txt
站在这个文件夹中,它收集软件包但永远不会安装它们(它永远显示“清理...>”)
在应用程序日志中我可以看到
ModuleNotFoundError: No module named 'flask_restful'
2019-09-04T14:55:19.215300670Z [2019-09-04 14:55:19 +0000] [39] [INFO] Worker exiting (pid: 39)
2019-09-04T14:55:19.234394151Z [2019-09-04 14:55:19 +0000] [38] [ERROR] Exception in worker process
如何确保 Web 应用程序使用 requirements.txt 中列出的包
有什么想法可能是错的吗?
解决方案
试图创建一个示例管道 -
pool:
name: Azure Pipelines
steps:
- task: UsePythonVersion@0
displayName: 'Use Python 3.6'
inputs:
versionSpec: 3.6
- task: PythonScript@0
displayName: 'Run a Python script'
inputs:
scriptSource: inline
script: 'pip install -r req.txt'
enabled: false
- script: 'pip install -r req.txt --target=$(Build.BinariesDirectory)'
displayName: 'Command Line Script'
- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.BinariesDirectory)'
inputs:
TargetFolder: '$(Build.BinariesDirectory)'
- task: ArchiveFiles@2
displayName: 'Archive $(Build.BinariesDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy: '
inputs:
azureSubscription: ''
appType: webAppLinux
appName:
package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
runtimeStack: 'PYTHON|3.6'
PublishBuildArtifacts - 此处不需要,但可用于验证将发布到 webapp 的实际构建工件。您可以尝试验证包是否存在于工件中。
推荐阅读
- mysql - 如何从 Json 数组 mysql 中获取值
- json - Tradingview Json 提醒
- reactjs - 我应该如何构建我的 Firestore 安全规则?
- javascript - 如何更改 ag-grid (JavaScript) 侧边栏的宽度?
- javascript - 如何解决“警告:file_get_contents() 错误”消息 - 联系表格?
- c# - 为什么我的实体不想捆绑在一起?
- r - R 平滑函数返回错误“模型的系数比数据多”
- android - 无法从 onCreateOptionsMenu 调用内联 fun SearchView.OnQueryTextListener
- combobox - JavaFX ComboBox 方法绑定
- python - 如何使用 seaborn python 绘制数据点的比例