Azure 应用服务 Flask 部署错误:“无法响应端口 8000 上的 HTTP Ping;站点启动失败。检查容器日志进行调试。”

问题描述 投票:0回答:1

我们已经开始使用 Flask 和沉浸式服务阅读器。

当我们从 Visual Studio 代码在调试模式下运行沉浸式服务时,一切工作正常。但是,当我们开始在 Azure 中的 Web 应用程序之一中部署带有沉浸式阅读器的 Flask Web 应用程序时。它给了我们一个错误。请注意:我们通过下面链接中提到的 ZIP 文件来部署它:

https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Czip-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash% 2Cdeploy-说明-zip-azcli

我们已经完成了链接中提到的每个步骤,但我们仍然得到以下结果。 (看附图)。

https://i.sstatic.net/iVyZfxOj.png

然后,在检查 WebApp 中的日志后,我们发现错误如下:(当服务已发布并且我们尝试调用我们部署的 WebApp 时)

https://i.sstatic.net/QsqmMdnZ.png

“站点 api-aiml-learning-immersivereader-mpn-eastus 的容器 api-aiml-learning-immersivereader-mpn-eastus_0_8947b5bf 已退出,站点启动失败

容器 api-aiml-learning-immersivereader-mpn-eastus_0_8947b5bf 未响应端口 8000 上的 HTTP ping,站点启动失败。请参阅容器日志进行调试。 ”

We 是我们运行 WebApp 时所期望的页面。

enter image description here

有关更多详细信息,这里是我们从作为示例提供的示例中使用的代码。

app.py代码

from flask import Flask, render_template, jsonify
import requests
import os

app = Flask(__name__)

AZURE_CLIENT_ID = os.environ['AZURE_CLIENT_ID']
AZURE_CLIENT_SECRET = os.environ['AZURE_CLIENT_SECRET']
AZURE_TENANT_ID = os.environ['AZURE_TENANT_ID']
AZURE_RESOURCE = 'https://cognitiveservices.azure.com/.default'

@app.route('/')

def index():
    return render_template('index.html')


@app.route('/get_token', methods=['GET'])

def get_token():

    url = f'https://login.microsoftonline.com/{AZURE_TENANT_ID}/oauth2/v2.0/token'
    
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    data = {
        'client_id': AZURE_CLIENT_ID,
        'client_secret': AZURE_CLIENT_SECRET,
        'scope': AZURE_RESOURCE,
        'grant_type': 'client_credentials'
    }

    response = requests.post(url, headers=headers, data=data)
    if response.status_code == 200:
        token = response.json().get('access_token')
        return jsonify({'access_token': token})
    else:
        return jsonify({'error': 'Unable to fetch token'}), 500

if __name__ == '__main__':
    app.run(debug=True)

helpers.js

document.addEventListener('DOMContentLoaded', function() {
    document.getElementById('immersiveReaderButton').addEventListener('click', launchImmersiveReader);
});

function launchImmersiveReader() {
    fetch('/get_token')
        .then(response => response.json())
        .then(data => {
            console.log("data" ,data);
            if (data.access_token) {
                const token = data.access_token;
                console.log(token);
                const subdomain = '';  // Replace with your subdomain if necessary

                const content = {
                    title: "Immersive Reader Demo",
                    chunks: [
                        {
                            content: document.getElementById('contentToRead').innerHTML,
                            mimeType: 'text/html'
                        }
                    ]
                };

                const options = {
                    readAloudOptions: {
                        voice: 'en-US-JennyNeural',
                        speed: 1.0
                    },
                    uiLang: 'en'
                };

                ImmersiveReader.launchAsync(token, subdomain, content, options)
                    .then(() => {
                        console.log('Immersive Reader launched successfully');
                    })
                    .catch(error => {
                        console.error('Error launching Immersive Reader:', error);
                    });
            } else {
                console.error('Error fetching token:', data.error);
            }
        })
        
        .catch(error => {
            console.error('Error fetching token:', error);
        });
        console.log(ImmersiveReader.launchAsync);
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Immersive Reader</title>
    <script type='text/javascript' src='https://ircdname.azureedge.net/immersivereadersdk/immersive-reader-sdk.1.4.0.js'></script>
</head>
<body>
    <h1>Immersive Reader Demo</h1>
    <!-- The button with id 'immersiveReaderButton' -->
    <button id="immersiveReaderButton">Launch Immersive Reader</button>
    <!-- The paragraph with id 'contentToRead' -->
    <p id="contentToRead">This is some text to be read by the Immersive Reader.</p>
    <script type='text/javascript' src="{{ url_for('static', filename='helpers.js') }}"></script>
</body>
</html>
python azure azure-cognitive-services azure-appservice immersive-reader
1个回答
0
投票

我尝试了你的代码,将项目部署到Azure应用程序服务,没有任何问题。

我运行了以下命令进行 zip 部署。

az webapp deploy --resource-group <resourcegroupname> --name <azurewebappname> --src-path <zipfilepath>

enter image description here

Azure 应用服务输出

enter image description here

第二种方法:-

以下是使用 Azure 扩展从 VS code 部署项目的步骤。

转到 Azure 扩展,在“应用服务”>“Web 应用程序”>“部署到 Web 应用程序”下选择您的订阅,如下所示,

enter image description here

选择您的项目路径并部署如下,

enter image description here

Azure 应用程序服务输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.