【Azure Bot Service】部署Python ChatBot代码到App Service中

news/2024/10/29 20:42:34/文章来源:https://www.cnblogs.com/lulight/p/18514390

问题描述

使用Python编写了ChatBot,在部署到App Service,却无法启动。 通过高级工具(Kudu站点:https://<your site name>.scm.chinacloudsites.cn/newui)查看日志显示:Failed to find attribute 'app' in 'app'.

2024-10-25T02:43:29.242073529Z    _____                               
2024-10-25T02:43:29.242126029Z   /  _  \ __________ _________   ____  
2024-10-25T02:43:29.242132529Z  /  /_\  \\___   /  |  \_  __ \_/ __ \ 
2024-10-25T02:43:29.242136329Z /    |    \/    /|  |  /|  | \/\  ___/ 
2024-10-25T02:43:29.242139929Z \____|__  /_____ \____/ |__|    \___  >
2024-10-25T02:43:29.242144329Z         \/      \/                  \/ 
2024-10-25T02:43:29.242147829Z A P P   S E R V I C E   O N   L I N U X
2024-10-25T02:43:29.242151329Z 
2024-10-25T02:43:29.242154629Z Documentation: http://aka.ms/webapp-linux
2024-10-25T02:43:29.242157929Z Python 3.9.19
2024-10-25T02:43:29.242161329Z Note: Any data outside '/home' is not persisted
2024-10-25T02:43:30.929950845Z Starting OpenBSD Secure Shell server: sshd.
2024-10-25T02:43:30.957953290Z WEBSITES_INCLUDE_CLOUD_CERTS is not set to true.
2024-10-25T02:43:31.046614933Z Updating certificates in /etc/ssl/certs...
2024-10-25T02:43:47.356555353Z 1 added, 0 removed; done.
2024-10-25T02:43:47.363583943Z Running hooks in /etc/ca-certificates/update.d...
2024-10-25T02:43:47.381370217Z done.
2024-10-25T02:43:47.458519508Z CA certificates copied and updated successfully.
2024-10-25T02:43:47.764113974Z App Command Line not configured, will attempt auto-detect
2024-10-25T02:43:47.766294671Z Launching oryx with: create-script -appPath /home/site/wwwroot -output /opt/startup/startup.sh -virtualEnvName antenv -defaultApp /opt/defaultsite
2024-10-25T02:43:48.070131739Z Found build manifest file at '/home/site/wwwroot/oryx-manifest.toml'. Deserializing it...
2024-10-25T02:43:48.117325272Z Build Operation ID: 1a78e454a2c951e6
2024-10-25T02:43:48.219390927Z Output is compressed. Extracting it...
2024-10-25T02:43:48.219435627Z Extracting '/home/site/wwwroot/output.tar.gz' to directory '/tmp/8dcf49cf7434c99'...
2024-10-25T02:43:48.221347324Z Oryx Version: 0.2.20240619.2, Commit: cf006407a02b225f59dccd677986973c7889aa50, ReleaseTagName: 20240619.2
2024-10-25T02:43:58.209300259Z App path is set to '/tmp/8dcf49cf7434c99'
2024-10-25T02:44:00.187313274Z Detected an app based on Flask
2024-10-25T02:44:00.187408174Z Generating `gunicorn` command for 'app:app'
2024-10-25T02:44:00.433932149Z Writing output script to '/opt/startup/startup.sh'
2024-10-25T02:44:00.699343416Z Using packages from virtual environment antenv located at /tmp/8dcf49cf7434c99/antenv.
2024-10-25T02:44:00.706651312Z Updated PYTHONPATH to '/opt/startup/app_logs:/tmp/8dcf49cf7434c99/antenv/lib/python3.9/site-packages'
2024-10-25T02:44:03.601118861Z [2024-10-25 02:44:03 +0000] [1064] [INFO] Starting gunicorn 22.0.0
2024-10-25T02:44:03.744989087Z [2024-10-25 02:44:03 +0000] [1064] [INFO] Listening at: http://0.0.0.0:8000 (1064)
2024-10-25T02:44:03.746948887Z [2024-10-25 02:44:03 +0000] [1064] [INFO] Using worker: sync
2024-10-25T02:44:03.849806606Z [2024-10-25 02:44:03 +0000] [1067] [INFO] Booting worker with pid: 1067
2024-10-25T02:44:10.688674133Z Failed to find attribute 'app' in 'app'.
2024-10-25T02:44:10.696985330Z [2024-10-25 02:44:10 +0000] [1067] [INFO] Worker exiting (pid: 1067)
2024-10-25T02:44:11.222634199Z [2024-10-25 02:44:11 +0000] [1064] [ERROR] Worker (pid:1067) exited with code 4
2024-10-25T02:44:11.222689699Z [2024-10-25 02:44:11 +0000] [1064] [ERROR] Shutting down: Master
2024-10-25T02:44:11.222696699Z [2024-10-25 02:44:11 +0000] [1064] [ERROR] Reason: App failed to load.

问题解答

根据下面的步骤修改app.py代码并设置App Service的启动命令。

 

第一步 : 在 app.py 中添加 init_func 函数

Python ChatBot的实例代码下载地址(创建机器人Python版:https://docs.azure.cn/zh-cn/bot-service/bot-service-quickstart-create-bot?view=azure-bot-service-4.0&tabs=python%2Cvs#create-a-bot)

app.py

# Create the Bot
BOT = EchoBot()# Listen for incoming requests on /api/messages
async def messages(req: Request) -> Response:return await ADAPTER.process(req, BOT)## 从这里开始修改,添加 init_func 启动函数def init_func(argv):APP = web.Application(middlewares=[aiohttp_error_middleware])APP.router.add_post("/api/messages", messages)return APP# APP = web.Application(middlewares=[aiohttp_error_middleware])
# APP.router.add_post("/api/messages", messages)if __name__ == "__main__":APP = init_func(None)try:web.run_app(APP, host="0.0.0.0", port=CONFIG.PORT)except Exception as error:raise error

 

第二步:在Config.py中添加配置项和部署到App Service中

添加的配置项是与中国区Azure Bot Service进行认证的配置项,说明需要参考如下两部分内容:

1: 机器人标识信息 : https://docs.azure.cn/zh-cn/bot-service/v4sdk/bot-builder-authentication?view=azure-bot-service-4.0&tabs=singletenant%2Caadv2%2Cpython#bot-identity-information

2: 机器人在中国区的身份验证设置 : https://docs.azure.cn/zh-cn/bot-service/how-to-deploy-china-cloud?view=azure-bot-service-4.0&tabs=javascript#configure-userassignedmsisingletenant-bot

 

config.py

#!/usr/bin/env python3
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.import os""" Bot Configuration """class DefaultConfig:""" Bot Configuration """PORT = 3978APP_ID = os.environ.get("MicrosoftAppId", "app id")APP_PASSWORD = os.environ.get("MicrosoftAppPassword", "secret")APP_TYPE = os.environ.get("MicrosoftAppType", "SingleTenant")APP_TENANTID = os.environ.get("MicrosoftAppTenantId", "tenant id")OAUTH_URL = os.environ.get("OAuthUrl", "https://token.botframework.azure.cn/")TO_BOT_FROM_CHANNEL_TOKEN_ISSUER = os.environ.get("ToBotFromChannelTokenIssuer", "https://api.botframework.azure.cn")TO_BOT_FROM_CHANNEL_OPENID_METADATA_URL = os.environ.get("ToBotFromChannelOpenIdMetadataUrl", "https://login.botframework.azure.cn/v1/.well-known/openidconfiguration")TO_BOT_FROM_EMULATOR_OPENID_METADATA_URL = os.environ.get("ToBotFromEmulatorOpenIdMetadataUrl", "https://login.partner.microsoftonline.cn/a55a4d5b-9241-49b1-b4ff-befa8db00269/v2.0/.well-known/openid-configuration")VALIDATE_AUTHORITY = os.environ.get("ValidateAuthority", "true")TO_CHANNEL_FROM_BOT_LOGIN_URL = os.environ.get("ToChannelFromBotLoginUrl","https://login.partner.microsoftonline.cn/<tenant id>")TO_CHANNEL_FROM_BOT_OAUTH_SCOPE = os.environ.get("ToChannelFromBotOAuthScope", "https://api.botframework.azure.cn")

requirements.txt:

botbuilder-integration-aiohttp>=4.15.0
aiohttp
botbuilder-core
botbuilder-schema

修改完成后,部署Python应用到App Service。

 

第三步: 为App Service添加启动命令

进入App Service配置页面,设置启动命令。

python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func

修改后,查看日志,应用启动成功!

 

参考资料

Azure ChatBot Running With Python on an Azure WebApp Not Working :  https://stackoverflow.com/questions/77781014/azure-chatbot-running-with-python-on-an-azure-webapp-not-working

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/823852.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统类型中的标准、VHD和VHDX是什

系统类型中的标准、VHD和VHDX是指计算机系统中的不同类型和格式。标准系统类型是指常见的操作系统,如Windows、Linux和macOS等,它们具有广泛的应用和用户基础。VHD(Virtual Hard Disk)和VHDX是虚拟硬盘的文件格式,用于在虚拟化环境中模拟硬盘存储。标准系统类型是操作系统…

Vue基础–v-model表单

v-model的基本使用基本使用<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</titl…

测试方法

测试方法分类 静态测试方法不执行程序的测试方法 主要用于测试文档和代码 静态测试包括评审和静态分析方法 可使用一些静态分析工具动态测试方法通过运行程序来发现缺陷的测试方法。黑盒测试方法(不涉及程序内部接口)功能测试,数据驱动测试,基于说明书的测试 从用户观点出发…

基于Material Design风格开源、免费的WinForms UI控件库

前言 今天大姚给大家分享一个基于 Google 的 Material Design 风格开源、免费的.NET WinForms UI控件库:MaterialSkin。 WinForms介绍 WinForms是一个传统的桌面应用程序框架,它基于 Windows 操作系统的原生控件和窗体。通过简单易用的 API,开发者可以快速构建基于窗体的应用…

babel基本概念

是前端开发环境必备工具。用于把ES6语法转换为ES5、ES4,兼容不同浏览器。 - 环境搭建 & 基本配置 安装一些插件、配置.babelrc。通过plugins里面的东西转换语法。preset-env是一堆plugin的集合。npx babel src/index.js - babel-polyfill 浏览器补丁。core-js标准的库,集…

高级程序语言设计课程第五次个人作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第五次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13298 学号:102400213 姓名:范自亮 第八章 8.11.18.11.2 问题:不知如何输出\n、\t 解决方案:网上查询8.11.38.11.48…

Tiki靶机练习

Scan 先arp-scan -l扫描附件主机ip nmap -sS -sV -n -T4 -p- 192.168.93.132 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-03 20:25 CST Nmap scan report for 192.168.93.132 Host is up (0.0013s latency). Not shown: 65531 closed tcp ports (reset) PORT S…

【计算力学】CST单元格式推导

101CST单元格式推导本文来自博客园,作者:FE-有限元鹰,转载请注明原文链接:https://www.cnblogs.com/aksoam/p/18514294

李辉琦的第二次作业

| 这次作业属于哪个课程 | https://edu.cnblogs.com/campus/zjlg/rjjc | | 这个作业的目标 | | 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。| | 姓名-学号 | 李辉琦-2022339920017 | 码云仓库地…

24.10.29

A 记少加一个取地址符怒挂 90pts。 虽然本身也不是正解吧。 先用 A 造个线性姬,然后用这个线性姬把剩下的数变成 B,再用处理好的部分造线性姬,回头处理 A。 上面这个在 \(n\) 较大的时候表现良好,因为用 B 可以造出一个完整的线性基。 上面是没加取地址符挂的 90pts。 (下…

QT creator中cmake管理项目,如何引入外部库(引入Eigen库为例)

在Eigen的官网下载压缩包[点我进入]解压到当前项目的根目录(当然你也可以自己选择目录)在当前项目的CMakeLists.txt任意位置加入这句话include_directories(${CMAKE_SOURCE_DIR}/eigen)这时候就是测试是否引入成功,在main.cpp中加入#include <Eigen/Dense>,鼠标悬停如…

实验二 类和对象

任务1 代码: t.h:1 #pragma once 2 #include<string>3 4 class T {5 public:6 T(int x = 0, int y = 0);7 T(const T& t);8 T(T&& t);9 ~T(); 10 void adjust(int ratio); 11 void display()const; 12 private: 13 int m1, m2…