【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误

简介: 【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误

问题描述

Python Flash应用上云,本地Git部署(https://docs.azure.cn/zh-cn/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Clocal-git-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli),遇见两类问题。

1: src refspec master does not match any

> git push azure master

error: src refspec master does not match any

error: failed to push some refs to 'https://xxxxxxxxx.scm.chinacloudsites.cn:443/xxxxxxxxx.git'

2:remote: Error - Changes committed to remote repository but deployment to website failed.

> git push azure main   
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Deploy Async
remote: The current deployment branch is 'master', but nothing has been pushed to it
remote: Error - Changes committed to remote repository but deployment to website failed.
remote: Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
remote:    at Kudu.Console.Program.PerformDeploy(String appRoot, String wapTargets, String deployer, String lockPath, IEnvironment env, IDeploymentSettingsManager settingsManager, TraceLevel level, ITracer tracer, ITraceFactory traceFactory, IOperationLock deploymentLock, IBuildService buildService) in /tmp/KuduLite/Kudu.Console/Program.cs:line 220
remote:    at Kudu.Console.Program.Main(String[] args) in /tmp/KuduLite/Kudu.Console/Program.cs:line 95
remote: Aborted (core dumped)
To https://xxxxxxxxx.scm.chinacloudsites.cn:443/xxxxxxxxx.git
   223b3cf..6250814  main -> main

 

问题解答

面对问题,反复尝试。

继续使用 " git push azure master " " git push azure main " 指令push本地文件到App Service, 但总是显示 error : xxxx 或 Everything up-to-date 。 根本无法完成App Service的部署操作。

对比文档,对有默认的 master  branch变换为main,检查官方文档中,需要设置DEPLOYMENT_BRANCH参数,并设置为 main。

应用服务的默认部署分支是 master,但许多 Git 存储库将从 master 移至 main。 可以在推送中指定本地分支名称和远程分支名称之间的对应关系(如下所示),也可以配置 DEPLOYMENT_BRANCH 应用设置

配置完成后,通过对本地文件修改,使得 push 时不再是 everything up-to-date。

# 添加修改的内容

git add  .

# 提交修改到本地 Ropes

git commit -m "update"

# Push到App Service Repostory

git push azure main

此次,输出内容完成,并明确提示Deployment successful。

PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git push azure main
Everything up-to-date
PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git add  .
PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git commit -m "update"
[main a7afc79] update
 1 file changed, 1 insertion(+), 1 deletion(-)
PS C:\MyWorkPlace\CaseFile\CASE\msdocs-python-flask-webapp-quickstart> git push azure main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Deploy Async
remote: Updating branch 'main'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a7afc79780'.
remote: PreDeployment: context.CleanOutputPath False
remote: PreDeployment: context.OutputPath /home/site/wwwroot
remote: Repository path is /home/site/repository
remote: Running oryx build...
remote: Operation performed by Microsoft Oryx, https://github.com/Microsoft/Oryx
remote: You can report issues at https://github.com/Microsoft/Oryx/issues
remote: 
remote: Oryx Version: 0.2.20230508.1, Commit: 7fe2bf39b357dd68572b438a85ca50b5ecfb4592, ReleaseTagName: 20230508.1
remote: 
remote: Build Operation ID: 749d23a7e7e13313
remote: Repository Commit : a7afc79780d8f7246cb32368c547078f5ffb36b7
remote: OS Type           : buster
remote: Image Type        : githubactions
remote: 
remote: Detecting platforms...
remote: .
remote: Detected following platforms:
remote:   python: 3.9.18
remote: Version '3.9.18' of platform 'python' is not installed. Generating script to install it...
remote: 
remote: Using intermediate directory '/tmp/8dc73196223c40d'.
remote: 
remote: Copying files to the intermediate directory...
remote: Done in 1 sec(s).
remote: 
remote: Source directory     : /tmp/8dc73196223c40d
remote: Destination directory: /home/site/wwwroot
remote:
remote: 
remote: Downloading and extracting 'python' version '3.9.18' to '/tmp/oryx/platforms/python/3.9.18'...
remote: Detected image debian flavor: buster.
remote: Downloaded in 3 sec(s).
remote: Verifying checksum...
remote: Extracting contents...
remote: .......
remote: performing sha512 checksum for: python...
remote: Done in 16 sec(s).
remote: 
remote: Python Version: /tmp/oryx/platforms/python/3.9.18/bin/python3.9
remote: Creating directory for command manifest file if it does not exist
remote: Removing existing manifest file
remote: Python Virtual Environment: antenv
remote: Creating virtual environment...
remote: ...............
remote: Activating virtual environment...
remote: Running pip install...
remote: ........
remote: [06:54:16+0000] Collecting Flask==2.2.2
remote: [06:54:17+0000]   Downloading Flask-2.2.2-py3-none-any.whl (101 kB)
remote: [06:54:17+0000]      ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 101.5/101.5 kB 626.3 kB/s eta 0:00:00
remote: [06:54:17+0000] Collecting gunicorn
remote: [06:54:17+0000]   Downloading gunicorn-22.0.0-py3-none-any.whl (84 kB)
remote: [06:54:17+0000]      ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 84.4/84.4 kB 2.6 MB/s eta 0:00:00
remote: [06:54:18+0000] Collecting Werkzeug==2.2.2
remote: [06:54:18+0000]   Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB)
remote: [06:54:18+0000]      ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 232.7/232.7 kB 2.0 MB/s eta 0:00:00
remote: [06:54:18+0000] Collecting Jinja2>=3.0
remote: [06:54:18+0000]   Downloading jinja2-3.1.4-py3-none-any.whl (133 kB)
remote: [06:54:18+0000]      ━━━━━━━━━━━━━━��━━━━━━━━━━━━━━━━━━━━━━━━ 133.3/133.3 kB 9.3 MB/s eta 0:00:00
remote: [06:54:18+0000] Collecting click>=8.0
remote: [06:54:19+0000]   Downloading click-8.1.7-py3-none-any.whl (97 kB)
remote: [06:54:19+0000]      ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 97.9/97.9 kB 8.9 MB/s eta 0:00:00
remote: [06:54:19+0000] Collecting importlib-metadata>=3.6.0
remote: [06:54:19+0000]   Downloading importlib_metadata-7.1.0-py3-none-any.whl (24 kB)
remote: [06:54:19+0000] Collecting itsdangerous>=2.0
remote: [06:54:20+0000]   Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
remote: [06:54:20+0000] Collecting MarkupSafe>=2.1.1
remote: [06:54:20+0000]   Downloading MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
remote: [06:54:21+0000] Collecting packaging
remote: [06:54:21+0000]   Downloading packaging-24.0-py3-none-any.whl (53 kB)
remote: [06:54:21+0000]      ΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöüΓöü 53.5/53.5 kB 4.0 MB/s eta 0:00:00
remote: [06:54:21+0000] Collecting zipp>=0.5
remote: [06:54:21+0000]   Downloading zipp-3.18.1-py3-none-any.whl (8.2 kB)
remote: [06:54:22+0000] Installing collected packages: zipp, packaging, MarkupSafe, itsdangerous, click, Werkzeug, Jinja2, importlib-metadata, gunicorn, Flask
remote: [06:54:24+0000] Successfully installed Flask-2.2.2 Jinja2-3.1.4 MarkupSafe-2.1.5 Werkzeug-2.2.2 click-8.1.7 gunicorn-22.0.0 importlib-metadata-7.1.0 itsdangerous-2.2.0 packaging-24.0 zipp-3.18.1
remote: 
remote: [notice] A new release of pip is available: 23.0.1 -> 24.0
remote: Not a vso image, so not writing build commands
remote: Not a vso image, so not writing build commands
remote: Preparing output...
remote:
remote: Copying files to destination directory '/tmp/_preCompressedDestinationDir'...
remote: Done in 4 sec(s).
remote: Compressing content of directory '/tmp/_preCompressedDestinationDir'...
remote: Copied the compressed output to '/home/site/wwwroot'
remote:
remote: Removing existing manifest file
remote: Creating a manifest file...
remote: Manifest file created.
remote: Copying .ostype to manifest output directory.
remote:
remote: Done in 60 sec(s).
remote: Running post deployment command(s)...
remote:
remote: Generating summary of Oryx build
remote: Parsing the build logs
remote: Found 0 issue(s)
remote:
remote: Build Summary :
remote: ===============
remote: Errors (0)
remote: Warnings (0)
remote:
remote: Triggering recycle (preview mode disabled).
remote: Deployment successful. deployer =  deploymentPath =
remote: Deployment Logs : 'https://********.scm.chinacloudsites.cn/newui/jsonviewer?view_url=/api/deployments/a7afc79780d8f7246cb32368c547078f5ffb36b7/log'
To https://********.scm.chinacloudsites.cn:443/********.git
   6250814..a7afc79  main -> main

 

 

参考资料

快速入门:将 Python(Django 或 Flask)Web 应用部署到 Azure应用服务 : https://docs.azure.cn/zh-cn/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Clocal-git-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli

更改部署分支 : https://docs.azure.cn/zh-cn/app-service/deploy-local-git?tabs=cli#change-deployment-branch

 

相关文章
|
9天前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
33 11
|
4天前
|
缓存 容器 Perl
【Azure Container App】Container Apps 设置延迟删除 (terminationGracePeriodSeconds) 的解释
terminationGracePeriodSeconds : 这个参数的定义是从pod收到terminated signal到最终shutdown的最大时间,这段时间是给pod中的application 缓冲时间用来处理链接关闭,应用清理缓存的;并不是从idel 到 pod被shutdown之间的时间;且是最大时间,意味着如果application 已经gracefully shutdown,POD可能被提前terminated.
|
8天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
7天前
|
Java 开发工具 Windows
【Azure App Service】在App Service中调用Stroage SDK上传文件时遇见 System.OutOfMemoryException
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
|
7天前
|
安全 Apache 开发工具
【Azure App Service】在App Service上关于OpenSSH的CVE2024-6387漏洞解答
CVE2024-6387 是远程访问漏洞,攻击者通过不安全的OpenSSh版本可以进行远程代码执行。CVE-2024-6387漏洞攻击仅应用于OpenSSH服务器,而App Service Runtime中并未使用OpenSSH,不会被远程方式攻击,所以OpenSSH并不会对应用造成安全风险。同时,如果App Service的系统为Windows,不会受远程漏洞影响!
|
10天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
32 2
|
19天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
25 2
|
21天前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
27 1
|
1月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第12天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。首先概述了API的重要性及RESTful API的基本概念,接着详细讲解了Flask框架的特性和安装方法。通过创建一个基本的Flask应用,定义了处理“图书”资源的GET、POST、PUT和DELETE方法的路由,展示了如何处理请求和响应,以及如何进行错误处理。最后,提供了运行和测试API的方法,总结了Flask在构建RESTful API方面的优势。
34 1
|
1月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第10天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了代码示例。通过这些步骤,读者可以快速掌握使用Flask构建RESTful API的方法。
51 1