我们已经开始使用 Flask 和沉浸式服务阅读器。
当我们从 Visual Studio 代码在调试模式下运行沉浸式服务时,一切工作正常。但是,当我们开始在 Azure 中的 Web 应用程序之一中部署带有沉浸式阅读器的 Flask Web 应用程序时。它给了我们一个错误。请注意:我们通过下面链接中提到的 ZIP 文件来部署它:
我们已经完成了链接中提到的每个步骤,但我们仍然得到以下结果。 (看附图)。
然后,在检查 WebApp 中的日志后,我们发现错误如下:(当服务已发布并且我们尝试调用我们部署的 WebApp 时)
“站点 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 时所期望的页面。
有关更多详细信息,这里是我们从作为示例提供的示例中使用的代码。
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>
我尝试了你的代码,将项目部署到Azure应用程序服务,没有任何问题。
我运行了以下命令进行 zip 部署。
az webapp deploy --resource-group <resourcegroupname> --name <azurewebappname> --src-path <zipfilepath>
Azure 应用服务输出:
第二种方法:-
以下是使用 Azure 扩展从 VS code 部署项目的步骤。
转到 Azure 扩展,在“应用服务”>“Web 应用程序”>“部署到 Web 应用程序”下选择您的订阅,如下所示,
选择您的项目路径并部署如下,
Azure 应用程序服务输出: