Ошибка развертывания Flask службы приложений Azure: «Не удалось ответить на HTTP-запросы связи на порту 8000; не удалось запустить сайт. Проверьте журналы контейнера на наличие отладки»

Мы начали работать с Flask и с иммерсивным сервисным ридером.

Все работает нормально, когда мы запускаем иммерсивный сервис в режиме отладки из кода Visual Studio. НО, когда мы начинаем развертывание веб-приложения Flask с помощью Immersive Reader в одном из наших веб-приложений в Azure. Это дает нам ошибку. Обратите внимание: мы развертываем его с помощью 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-instructions-zip-azcli

Мы выполнили все шаги, упомянутые в ссылке, но все равно получаем результат ниже. (посмотрите на прикрепленное изображение).

Затем, после проверки журналов в WebApp, мы обнаруживаем ошибку, как показано ниже: (когда служба опубликована и мы пытаемся вызвать наше развернутое WebApp)

«Контейнер api-aiml-learning-immersivereader-mpn-eastus_0_8947b5bf для сайта api-aiml-learning-immersivereader-mpn-eastus завершился, сайт не запускается

Контейнер api-aiml-learning-immersivereader-mpn-eastus_0_8947b5bf не ответил на HTTP-пинги на порту: 8000, не удалось запустить сайт. Просмотрите журналы контейнера для отладки. "

We — это страница, которую мы ожидаем при запуске WebApp.

Для получения более подробной информации, вот код, который мы использовали из примеров, предоставленных в качестве образца.

код приложения.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.info("data" ,data);
            if (data.access_token) {
                const token = data.access_token;
                console.info(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.info('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.info(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>

Вы пытаетесь использовать тот же пример кода, который приведен в документе Doc. @риддхи

Jahnavi 15.06.2024 15:12

Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Community 15.06.2024 16:24

В своем коде я предоставляю файлы index.html, helpers.js, app.py,requirements.txt и среду. Приложение корректно работает на локальном хосте; однако я столкнулся с проблемами после развертывания кода в Службах приложений Azure.

riddhi 17.06.2024 07:55

@riddhi, пожалуйста, поделитесь кодом Python (Django or Flask), который вы пробовали использовать azure-cognitive-services, в текстовом формате.

Sampath 17.06.2024 09:28

Пожалуйста, публикуйте сообщение об ошибке в виде текста, а не изображений. Поскольку у людей с программами чтения с экрана могут возникнуть проблемы, это также влияет на поиск.

Dijkgraaf 21.06.2024 00:09

@Dijkgraaf, я включил ошибку в текст вопроса.

riddhi 21.06.2024 12:43

@riddhi Вместо использования app.run(debug=True) используйте app.run(host= '0.0.0.0', port=8000).

Dasari Kamali 26.06.2024 16:11

@riddhi Если возможно, поделитесь файлами helper.js и index.html.

Dasari Kamali 26.06.2024 16:12

@DasariKamali, я включил в вопрос код helpers.js и index.html.

riddhi 27.06.2024 07:47

@DasariKamali, спасибо за ваше предложение. Однако я уже пробовал, и это не сработало. Есть ли у вас другие рекомендации?

riddhi 27.06.2024 07:48

@riddhi Добавьте Gunicorn --bind=0.0.0.0:8000 main:app в команду запуска в службе приложений Azure и повторите попытку.

Dasari Kamali 27.06.2024 07:55

@DasariKamali, мы вручную добавили команду запуска в Службы приложений Azure, а также попытались использовать файл start.txt, но ни один из подходов не сработал.

riddhi 27.06.2024 08:11

@riddhi Попробуйте создать новую службу приложений Azure и развернуть ее еще раз.

Dasari Kamali 27.06.2024 08:37

@DasariKamali, мы также попытались решить проблему, создав таким же образом еще одну службу приложений Azure и еще одну когнитивную службу, но ошибка не устранена. Поэтому вполне вероятно, что в наших шагах по развертыванию есть недостатки. Не могли бы вы предложить комплексный, комплексный подход к развертыванию?

riddhi 27.06.2024 09:17

@DasariKamali, спасибо за ответ! Это очень помогло. Я также нашел одну из проблем в своем файле и добавил ее в свой ответ.

riddhi 05.07.2024 08:36

@riddhi Я рад узнать, что проблема решена.

Dasari Kamali 05.07.2024 08:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
16
199
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я опробовал ваш код, без проблем развернул проект в службе приложений Azure.

Я выполнил приведенную ниже команду для развертывания zip.

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

Вывод службы приложений Azure:

Второй подход: -

Ниже приведены инструкции по развертыванию проекта из кода VS с помощью расширения Azure.

Перейдите к расширению Azure и выберите свою подписку в разделе «Службы приложений» > «Веб-приложение» > «Развертывание в веб-приложение», как показано ниже.

Выберите путь проекта и разверните его, как показано ниже:

Вывод службы приложений Azure:

Просматривая файл журнала ошибок, я обнаружил следующую проблему:

Я исправил эту ошибку, добавив Werkzeug==3.0.3 в файл требований.txt.

Другие вопросы по теме