#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
находится шаблон$(MODULE_NAME):$(VARIABLE_NAME)
. Имя модуля может быть полным пунктирным путем. Имя переменной ссылается на вызываемый WSGI, который должен быть найден в указанном модуле.
С пробелом main:
и app
считываются как отдельные аргументы, а Gunicorn получает пустую строку в качестве своей VARIABLE_NAME
.