gunicorn + Flask на Heroku, имя модуля и имя приложения неверны - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь запустить приложение Flask на Heroku (с nginx + gunicorn).Мой профайл Heroku:

web: bin/start-nginx gunicorn -c config/gunicorn.py myflaskmodule:app

Я получаю ошибки от gunicorn, такие как:

gunicorn.errors.HaltServer: <HaltServer 'App failed to load.' 4>

или, в зависимости от имени приложения, которое я пробовал, ошибка gunicorn может быть:

Application object must be callable.

Приложение Flask настроено в каталоге с именем myflaskmodule, содержащем каталог static, каталог templates, auth.py, db.py, btac.py и __init__.py,

В btac.py проект определяется как:

 bp = Blueprint('btac', __name__, url_prefix='/btac')

Затем я определяю несколько функций колб в btac.py, таких как:

@bp.route('/', methods=['GET'])
def index():
  # Do some things...
  return render_template()

В __init.py__ У меня есть одна функция:

def create_app(test_config=None):
  app = Flask(__name__, instance_relative_config=True)

  # lots of other unrelated content here...

  db.init_app(app)
  app.register_blueprint(auth.bp)
  app.register_blueprint(btac.bp)
  return app

В терминале (или bash-скрипте) после выполнения export FLASK_ENV=development и export FLASK_APP=myflaskmodule приложение Flask запускается локально с flask run.

Как мне определить последний аргумент в профиле Heroku?Это должно быть module_name:app_name.Я попытался myflaskmodule:app, myflaskmodule:myflaskmodule, myflaskmodule:bp, myflaskmodule:btac.

Я вполне уверен, что первая часть аргумента должна быть myflaskmodule (имя основного каталога Flask),но я не могу точно определить название приложения Flask.

Flask == 1.0.2, gunicorn == 19.9.0

1 Ответ

0 голосов
/ 28 сентября 2018

Если вы добавите web: gunicorn "myflaskmodule:create_app()" в свой Procfile, это должно работать.В приведенном выше коде у вас нет переменной приложения для использования с myflaskmodule:app, но у вас есть функция, которая возвращает приложение Flask, так что вы можете использовать это.

...