繁体   English   中英

部署后烧瓶/python 应用程序出现 Heroku H13 错误

[英]Heroku H13 error with flask/python app after deployment

我有一个 flask 应用程序,可以在本地正常工作并部署到 Heroku。 主页可以访问并正确显示,但是在提交将用户带到另一个页面的表单时,会引发H13 错误Connection closed without response

该请求需要 10 到 15 秒才能在本地完成,但是在 Heroku 中提交表单时,需要 30 秒然后崩溃。

知道为什么应用程序会很好地部署到 Heroku 但在发送表单/更改页面时会引发此错误吗?

这是日志中的错误:

2021-06-01T21:51:53.871045+00:00 heroku[router]: at=info method=GET path="/" host=the-mgr-project.herokuapp.com request_id=ed08f910-e0b9-4c76-8bb3-3a82cc3ca59e fwd="213.55.220.236" dyno=web.1 connect=0ms service=2ms status=200 bytes=9082 protocol=https
2021-06-01T21:51:53.870405+00:00 app[web.1]: 10.79.199.219 - - [01/Jun/2021:21:51:53 +0000] "GET / HTTP/1.1" 200 8927 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
2021-06-01T21:52:30.223394+00:00 app[web.1]: [2021-06-01 21:52:30 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:103)
2021-06-01T21:52:31.246525+00:00 app[web.1]: [2021-06-01 21:52:31 +0000] [4] [WARNING] Worker with pid 103 was terminated due to signal 9
2021-06-01T21:52:31.250736+00:00 app[web.1]: [2021-06-01 21:52:31 +0000] [118] [INFO] Booting worker with pid: 118
2021-06-01T21:52:32.360804+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
2021-06-01T21:52:32.360844+00:00 app[web.1]:   warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
2021-06-01T21:52:33.043821+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/" host=the-mgr-project.herokuapp.com request_id=88d57e33-4d13-4c5b-a11e-d1ef3ee97d2c fwd="213.55.220.236" dyno=web.1 connect=0ms service=33025ms status=503 bytes=0 protocol=https
2021-06-01T21:52:33.983811+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator LogisticRegression from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:33.983830+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:33.983899+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator Pipeline from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:33.983900+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:33.984524+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator GridSearchCV from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:33.984525+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:34.008224+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator KNeighborsClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:34.008227+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:34.029465+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator DecisionTreeClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:34.029467+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:34.053156+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator RandomForestClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:34.053159+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:52:34.054204+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator SVC from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:52:34.054206+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:10.332060+00:00 app[web.1]: [2021-06-01 21:53:10 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:88)
2021-06-01T21:53:11.362566+00:00 app[web.1]: [2021-06-01 21:53:11 +0000] [4] [WARNING] Worker with pid 88 was terminated due to signal 9
2021-06-01T21:53:11.368584+00:00 app[web.1]: [2021-06-01 21:53:11 +0000] [133] [INFO] Booting worker with pid: 133
2021-06-01T21:53:11.542838+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/" host=the-mgr-project.herokuapp.com request_id=69126ca8-1e2d-4dab-a27b-f5cd0bdce60a fwd="213.55.220.236" dyno=web.1 connect=0ms service=31491ms status=503 bytes=0 protocol=https
2021-06-01T21:53:12.723118+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
2021-06-01T21:53:12.723129+00:00 app[web.1]:   warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
2021-06-01T21:53:15.004051+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator LogisticRegression from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.004065+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.004129+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator Pipeline from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.004129+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.004765+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator GridSearchCV from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.004766+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.036069+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator KNeighborsClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.036072+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.063638+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator DecisionTreeClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.063640+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.090726+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator RandomForestClassifier from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.090730+00:00 app[web.1]:   warnings.warn(
2021-06-01T21:53:15.091483+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator SVC from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-01T21:53:15.091485+00:00 app[web.1]:   warnings.warn(

我的档案:

web: gunicorn app:app

POST 方法的 HTML:

<form enctype=multipart/form-data action={{url_for('upload_file')}} method="POST" enctype="multipart/form-data">
                <h3>Title</h3>
                <label for="file-input" class="col-sm-4 col-form-label">The music (.wav):</label>
                <input type="file" id="file-input" name="file" class="form-control w-100" required="true"/><br>
                <br>
                <div class="form-group">
                    <h4>Select a model</h4>
                    <input type="radio" id="logreg" name="model" value="logreg" required>
                    <label for="logreg">Logistic regression</label><br>
                    <input type="radio" id="knn" name="model" value="knn">
                    <label for="knn">K-nearest neighbors</label><br>
                    <input type="radio" id="randomforest" name="model" value="randomforest">
                    <label for="randomforest">Random forest</label><br>
                    <input type="radio" id="svm" name="model" value="svm">
                    <label for="svm">Kernel SVM</label><br>
                </div>
                <input type="submit" value="Submit" class="btn btn-primary" id="submit-button">
</form>

和 app.py 文件:

@app.route('/', methods=['POST'])
def upload_file():
    """Main function that gets form infos, extract values from .wav and send result"""

    if request.method == 'POST':

        # Get informations from form: file and chosen model
        model = request.form.get("model")
        spec_checkbox = request.form.get("spectrogram")
        chroma_checkbox = request.form.get("chroma")
        tempo_checkbox = request.form.get("tempo")
        uploaded_file = request.files['file']
        filename = uploaded_file.filename

        # If a file is selected, save it to uploads folder
        if filename == '':
            return 'No file selected'
        else:
            uploaded_file.save(secure_filename(filename))
            track_path = "uploads/" + str(filename)
            shutil.move(filename, track_path)
            print(str(filename) + " has been downloaded and the chosen model is " + str(model))

        # Extract features and remove file from upload folder
        features = extract()
        os.remove(track_path)

        # Call function according to user choice
        if model == 'logreg':
            result_list = logreg(features[0], features[1])
        elif model == 'knn':
            result_list = knn(features[0], features[1])
        elif model == 'randomforest':
            result_list = randomforest(features[0], features[1])
        elif model == 'svm':
            result_list = svm(features[0], features[1])

        text = "Your file " + str(result_list[0]) + "\'s predicted genre is <b style=\"color:red;\">" + str(result_list[1]) + "</b> with the model " + str(result_list[2]) + "!"
        return render_template("results.html", text = text)

这是另一个编辑,因为经过几次测试后,我可以看到应用程序在调用extract() function 时崩溃。 它仍然在本地工作,所以我真的不明白为什么它不能在 heroku 上工作。 通过 app.py 中的一些print ,可以看到请求一直持续到extract() - 请参阅错误日志:

2021-06-02T01:33:20.985460+00:00 app[web.1]: moonlight.wav has been downloaded and the chosen model is logreg
2021-06-02T01:33:20.986694+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator StandardScaler from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-02T01:33:20.986696+00:00 app[web.1]:   warnings.warn(
2021-06-02T01:33:20.986847+00:00 app[web.1]: /app/.heroku/python/lib/python3.9/site-packages/sklearn/base.py:310: UserWarning: Trying to unpickle estimator PowerTransformer from version 0.23.2 when using version 0.24.2. This might lead to breaking code or invalid results. Use at your own risk.
2021-06-02T01:33:20.986848+00:00 app[web.1]:   warnings.warn(
2021-06-02T01:33:20.989981+00:00 app[web.1]: Analyzing file 1 of 1: uploads/moonlight.wav
2021-06-02T01:33:26.229450+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=POST path="/" host=the-mgr-project.herokuapp.com request_id=9c914ee3-3434-41e2-9d77-2d3e2c3cd21d fwd="172.58.140.104" dyno=web.1 connect=0ms service=30104ms status=503 bytes=0 protocol=https
2021-06-02T01:33:26.171668+00:00 app[web.1]: [2021-06-02 01:33:26 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:36)
2021-06-02T01:33:26.230125+00:00 app[web.1]: [2021-06-02 01:33:26 +0000] [36] [INFO] Worker exiting (pid: 36)
2021-06-02T01:33:27.043439+00:00 app[web.1]: [2021-06-02 01:33:27 +0000] [44] [INFO] Booting worker with pid: 44

如果您的应用程序在 localhost 上运行良好,请尝试将您的 Procfile 更改为:

web: gunicorn app:app --preload

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM