Мы начали работать с Flask и с иммерсивным сервисным ридером.
Все работает нормально, когда мы запускаем иммерсивный сервис в режиме отладки из кода Visual Studio. НО, когда мы начинаем развертывание веб-приложения Flask с помощью Immersive Reader в одном из наших веб-приложений в Azure. Это дает нам ошибку. Обратите внимание: мы развертываем его с помощью ZIP-файла, указанного по ссылке ниже:
Мы выполнили все шаги, упомянутые в ссылке, но все равно получаем результат ниже. (посмотрите на прикрепленное изображение).
Затем, после проверки журналов в 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>
Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
В своем коде я предоставляю файлы index.html, helpers.js, app.py,requirements.txt и среду. Приложение корректно работает на локальном хосте; однако я столкнулся с проблемами после развертывания кода в Службах приложений Azure.
@riddhi, пожалуйста, поделитесь кодом Python (Django or Flask)
, который вы пробовали использовать azure-cognitive-services
, в текстовом формате.
Пожалуйста, публикуйте сообщение об ошибке в виде текста, а не изображений. Поскольку у людей с программами чтения с экрана могут возникнуть проблемы, это также влияет на поиск.
@Dijkgraaf, я включил ошибку в текст вопроса.
@riddhi Вместо использования app.run(debug=True) используйте app.run(host= '0.0.0.0', port=8000).
@riddhi Если возможно, поделитесь файлами helper.js и index.html.
@DasariKamali, я включил в вопрос код helpers.js и index.html.
@DasariKamali, спасибо за ваше предложение. Однако я уже пробовал, и это не сработало. Есть ли у вас другие рекомендации?
@riddhi Добавьте Gunicorn --bind=0.0.0.0:8000 main:app в команду запуска в службе приложений Azure и повторите попытку.
@DasariKamali, мы вручную добавили команду запуска в Службы приложений Azure, а также попытались использовать файл start.txt, но ни один из подходов не сработал.
@riddhi Попробуйте создать новую службу приложений Azure и развернуть ее еще раз.
@DasariKamali, мы также попытались решить проблему, создав таким же образом еще одну службу приложений Azure и еще одну когнитивную службу, но ошибка не устранена. Поэтому вполне вероятно, что в наших шагах по развертыванию есть недостатки. Не могли бы вы предложить комплексный, комплексный подход к развертыванию?
@DasariKamali, спасибо за ответ! Это очень помогло. Я также нашел одну из проблем в своем файле и добавил ее в свой ответ.
@riddhi Я рад узнать, что проблема решена.
Я опробовал ваш код, без проблем развернул проект в службе приложений Azure.
Я выполнил приведенную ниже команду для развертывания zip.
az webapp deploy --resource-group <resourcegroupname> --name <azurewebappname> --src-path <zipfilepath>
Вывод службы приложений Azure:
Второй подход: -
Ниже приведены инструкции по развертыванию проекта из кода VS с помощью расширения Azure.
Перейдите к расширению Azure и выберите свою подписку в разделе «Службы приложений» > «Веб-приложение» > «Развертывание в веб-приложение», как показано ниже.
Выберите путь проекта и разверните его, как показано ниже:
Вывод службы приложений Azure:
Просматривая файл журнала ошибок, я обнаружил следующую проблему:
Я исправил эту ошибку, добавив Werkzeug==3.0.3 в файл требований.txt.
Вы пытаетесь использовать тот же пример кода, который приведен в документе Doc. @риддхи