Приложение Flask на Heroku получает ошибку приложения после развертывания

#python #gunicorn

#python #gunicorn

Вопрос:

Я пытаюсь запустить приложение Flask с Gunicorn на Heroku.

Это мой Procfile :

 web: gunicorn main: app
 

У меня есть файл с именем main.py . Вот часть кода вверху:

 from flask import Flask, redirect, url_for, render_template, request, session, flash
from datetime import timedelta, datetime
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = "{Secret Key}"
app.permanent_session_lifetime = timedelta(minutes=10)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite3'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db = SQLAlchemy(app)

....

if __name__ == "__main__":
    db.create_all()
    app.run(debug=True)
 

Мой requirements.txt :

 click==7.1.2
Flask==1.1.2
Flask-SQLAlchemy==2.4.4
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
SQLAlchemy==1.3.22
Werkzeug==1.0.1
 

Я получаю это в своих журналах:

 2020-12-31T00:00:05.879585 00:00 app[web.1]: Failed to parse '' as an attribute name or function call.
2020-12-31T00:00:05.880396 00:00 app[web.1]: [2020-12-31 00:00:05  0000] [11] [INFO] Worker exiting (pid: 11)
2020-12-31T00:00:05.887417 00:00 app[web.1]: Failed to parse '' as an attribute name or function call.
2020-12-31T00:00:05.888296 00:00 app[web.1]: [2020-12-31 00:00:05  0000] [10] [INFO] Worker exiting (pid: 10)
2020-12-31T00:00:06.139402 00:00 app[web.1]: [2020-12-31 00:00:06  0000] [4] [INFO] Shutting down: Master
2020-12-31T00:00:06.139670 00:00 app[web.1]: [2020-12-31 00:00:06  0000] [4] [INFO] Reason: App failed to load.
2020-12-31T00:00:06.291109 00:00 heroku[web.1]: Process exited with status 4
2020-12-31T00:00:06.360098 00:00 heroku[web.1]: State changed from up to crashed
2020-12-31T00:00:12.000891 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" [some extra stuff]
2020-12-31T00:00:12.118356 00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" [some extra stuff]
 

Procfile Судя по тому, что я прочитал в Интернете, это правильно, но в остальном я не вижу в этом ничего плохого. Кто-нибудь знает, что с этим происходит?

Ответ №1:

Удалите пробел между main и app :

 web: gunicorn main:app
 

Гуникорн хочет [WSGI_APP]

Где WSGI_APP находится шаблон $(MODULE_NAME):$(VARIABLE_NAME) . Имя модуля может быть полным пунктирным путем. Имя переменной ссылается на вызываемый WSGI, который должен быть найден в указанном модуле.

С пробелом main: и app считываются как отдельные аргументы, а Gunicorn получает пустую строку в качестве своей VARIABLE_NAME .