Python / Flask - 托管服务器上的内部服务器错误

Posted

技术标签:

【中文标题】Python / Flask - 托管服务器上的内部服务器错误【英文标题】:Python / Flask - Internal Server Error on hosting server 【发布时间】:2021-10-12 10:33:15 【问题描述】:

在本地服务器上,此 Python 应用程序运行良好,但是,当我在托管我的站点的服务器上设置此 Python 应用程序时,index.html 加载,这意味着 Python 设置良好,但是当我单击 @ 987654322@,在我select the language.wav file之后,出现错误:

Internal Server Error

The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

有谁知道错误在哪里,如果不是错误,如何克服服务器响应。

from flask import Flask, render_template, request, redirect
import speech_recognition as sr
import requests

app = Flask(__name__)

def get_languages():
    url = 'https://cloud.google.com/speech-to-text/docs/languages'
    resp = requests.get(url)
    start_text = '        <tbody class="list">\n'
    end_text = '        </tbody>\n'
    table = resp.text.split(start_text)[1].split(end_text)[0]
    tr_start = '          <tr>\n'
    sections = table.split(tr_start)[1:]
    languages = []

    for section in sections:
        short = section.splitlines()[1].split('<td>')[1].split('<')[0]
        long = section.splitlines()[0].split('<td>')[1].split('<')[0]
        if len(languages) > 0:
            # dupe check. For some reason the page has all
            # languages twice
            if languages[-1] != 'short': short, 'long': long:
                languages.append('short': short, 'long': long)
        else:
            languages.append('short': short, 'long': long)
    print(f'FOUND len(languages) LANGUAGES')
    return languages

language_list = get_languages()

@app.route("/", methods=["GET", "POST"])
def index():
    transcript = ""
    if request.method == "POST":
        print("FORM DATA RECEIVED")
        # set the language, use en-US by default
        language = request.form.get('lang') or 'en-US'

        print(f'SELECTED LANGUAGE: language')

        if "file" not in request.files:
            return redirect(request.url)

        file = request.files["file"]
        if file.filename == "":
            return redirect(request.url)

        if file:
            recognizer = sr.Recognizer()
            audioFile = sr.AudioFile(file)

            with audioFile as source:
                data = recognizer.record(source)
                recognizer.adjust_for_ambient_noise(source)

            # change the line below
            transcript = recognizer.recognize_google(data, language=language)
    
    return render_template('index.html', transcript=transcript, language_list=language_list)

if __name__ == "__main__":
    app.run(debug=True, threaded=True)

日志文件

FOUND 137 LANGUAGES
FORM DATA RECEIVED
SELECTED LANGUAGE: en-US
FOUND 137 LANGUAGES
[2021-08-08 13:37:18,913] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/flask/app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/flask/app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/flask/app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "app.py", line 58, in index
    transcript = recognizer.recognize_google(data, language=language)
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/speech_recognition/__init__.py", line 828, in recognize_google
    convert_width=2  # audio samples must be 16-bit
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/speech_recognition/__init__.py", line 445, in get_flac_data
    flac_converter = get_flac_converter()
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/speech_recognition/__init__.py", line 1183, in get_flac_converter
    flac_converter = shutil_which("flac")  # check for installed version first
  File "/home/mysrv/virtualenv/transcriber/3.7/lib/python3.7/site-packages/speech_recognition/__init__.py", line 1217, in shutil_which
    for p in path.split(os.path.pathsep):
AttributeError: 'NoneType' object has no attribute 'split'

【问题讨论】:

我建议使用终端在服务器上运行它,然后查看发生错误时显示的异常。您如何/在服务器上的何处运行它? Linux?窗户? 这是一个租用的托管服务器,据我所知它是一个 Linux 服务器,我的访问权限有限,我使用 cPanel 运行 Python。 您需要访问日志文件。你看看有什么问题 我添加日志文件,请看。 你能验证变量“语言”是否有内容吗?打印出来吧。 【参考方案1】:

由于分数较少,我无法对上述讨论发表评论。 不,这不是由于服务器响应时间。

你试过了吗 改为transcript = recognizer.recognize_google(data)

【讨论】:

我已经尝试扔掉language=language,但它不起作用,出现同样的错误。 形成上面的日志 ** 文件“app.py”,第 58 行,在 index transcript = Recognizer.recognize_google(data, language=language) ** 这是有问题的行。您能否对此发表评论,以便我们确定服务器响应时间没有问题? 是的,我也注意到了,但是如何纠正这条线并解决问题? 当我评论这一行时,问题消失了,这意味着问题出在服务器响应时间上,正如我已经指出的那样。 @Dejo 这个答案有用吗?我想你以前试过这个?

以上是关于Python / Flask - 托管服务器上的内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

托管在 Heroku 上的 Flask SocketIO 应用程序不使用 @socketio.on 事件?

如何在apache服务器上托管python Flask应用程序?

tornado托管在windows上部署flask

Apache托管Flask无法看到Docker环境变量。

带有 GAE ndb 的 Flask Flask 安全性?

AWS Elastic Beanstalk - python 的 nginx 配置(AL2 上的 3.7)flask 应用程序