Как развернуть приложение Flask на AWS Elastic beanstalk с помощью фабрики приложений - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь развернуть приложение Flask на AWS и получаю ошибку 403 Forbidden.После долгих испытаний с AWS я, похоже, понял, что это ошибка на этом конце.Мое приложение Flask в настоящее время написано с использованием фабрики приложений и выглядит примерно так (упрощенно):

from flask import Flask

def create_app(test_config=None):
    application = Flask(__name__)
    app = application

    @app.route('/')
    def index():
        return "The index page"

    ...

    return app

Однако после того, как я настроил среду на Elastic beanstalk и развернул там свое приложение Flask, я посещаюстраница индекса, я получаю 403 Запрещенную ошибку.Я проверяю свои журналы на наличие EB и вижу сообщение: «1004 *

» «Целевой сценарий WSGI» /opt/python/current/app/server/application.py «не содержит приложения WSGI« приложение »."

Сначала я был смущен.Ранее у меня были другие ошибки с EB и я смотрел онлайн.Я не совсем понимаю, что такое стандарт WSGI, но я видел, как люди говорили, что EB будет работать только в том случае, если объект «app» Flask называется «application», который я намеренно изменил.Затем я посмотрел документацию AWS и понял, что их примеры не используют фабрику приложений, поэтому я догадывался, что не использовал фабрику приложений:

from flask import Flask

application = Flask(__name__)    
app = application

...    

@app.route('/')
def index():
    return "The index page"

if __name__ == "__main__":
    application.run()

Это сработало.Я могу только заключить, что, поскольку объект «application» определен на фабрике приложений, или тот факт, что он возвращает приложение вместо application.run (), он не регистрируется в EB.Опять же, я не очень понимаю WSGI и как это связано с ошибкой.Как я могу обойти это и развернуть с фабрикой приложений, так как я не хочу обойти переписывание большей части моего проекта?

1 Ответ

0 голосов
/ 25 октября 2018

Фабрика приложений создает экземпляр приложения, регистрирует маршруты для него и возвращает экземпляр.

Назначение application равным значению, возвращенному при вызове create_app, отвечает требованию EB, что вызываемый объект, реализующий WSGI, предоставляется как application name.

...