无法将简单的Flask应用程序部署到Azure Web应用程序

时间:2019-09-04 15:03:13

标签: python azure flask azure-web-app-service flask-restful

我正在尝试将一个非常简单的flask应用程序部署到linux azure Web应用程序,但似乎找不到任何已安装的软件包

它可以使用虚拟环境在localhost上工作

这是文件夹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

管道运行所有步骤而没有错误 Deployment Image

但是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中列出的软件包

有什么问题的想法吗?

1 个答案:

答案 0 :(得分:0)

试图创建示例管道-

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的实际构建工件。您可以尝试验证软件包是否存在于工件中。