Как развернуть структурированное приложение Flask на эластичном бобовом стебле AWS

После успешного развертывания тестового приложения с помощью шагов, описанных здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_flask.html

Я попытался развернуть мое приложение с флягой, которое имеет следующую структуру:

myApp/
   runServer.py
   requirements.txt
   myApp/
      __init__.py
      helpers.py
      clean.sh
      static/
         myApp.css
      handlers/
         __init__.py
         views.py
      templates/
         layout.html
         viewOne.html
         viewTwo.html

Где views.py содержит мои сопоставления url.

Я попытался инициализировать экземпляр eb в корневом каталоге, а также в модуле myApp и git aws.push, но я получил следующую ошибку на панели управления AWS: ERROR Your WSGIPath refers to a file that does not exist. и приложение не работает (404 для любого пути).

Как я могу применить вышеуказанное приложение Flask к эластичному beanstalk?

Ответы

Ответ 1

Добавьте в .ebextensions/<env-name>.config следующее:

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: myApp/handlers/views.py

Update:

Если у вас нет каталога .ebextensions, создайте его для проекта. Вы можете найти более подробную информацию о том, что можно сделать в отношении конфигурации контейнера в настройке и настройке AWS Elastic Beanstalk Environments.

Ответ 2

Я столкнулся с подобной проблемой при развертывании приложения Flask на EB с аналогичной структурой каталогов, и мне пришлось сделать 2 вещи:

  1. Обновите файл manage.py, чтобы создать приложение с именем name, а не app

    import os
    from application import create_app, db
    from flask.ext.script import Manager, Shell
    
    application = create_app(os.getenv('FLASK_CONFIG') or 'default')
    manager = Manager(application)
    
  2. Создайте .ebextensions/myapp.config и определите следующий блок, чтобы указать на manage.py

    option_settings:
      "aws:elasticbeanstalk:container:python":
        WSGIPath: manage.py
      "aws:elasticbeanstalk:container:python:staticfiles":
        "/static/": "application/static/" 
    

Это позволило Elastic Beanstalk найти приложение, вызываемое правильно.

Это кратко описано в официальных документах и более подробно описано в этом посте.

РЕДАКТИРОВАТЬ - см. Структуру проекта ниже

  • ProjectRoot
    • .ebextensions
      • application.config
    • приложение
      • главный
        • forms.py
        • views.py
    • статический
    • шаблоны
    • тесты
    • manage.py
    • requirements.txt
    • config.py
    • и т.д.

Ответ 3

Как и в awsebcli 3.0, вы можете фактически изменить свои настройки конфигурации, чтобы представить свой путь WSGI через eb config. Затем команда config вытащит (и откройте ее в текстовом редакторе командной строки по умолчанию, то есть nano) редактируемую конфигурацию, основанную на ваших текущих настройках конфигурации. Затем вы выполните поиск WSGI и обновите путь таким образом. После сохранения файла и выхода из него ваш путь WSGI будет обновляться автоматически.

Ответ 4

Ваш WSGIPath ссылается на файл, который не существует.

Эта ошибка появляется потому, что Beanstalk по умолчанию ищет application.py. Проверьте на веб-интерфейсе Beanstalk, Configuration > Software Configuration, WSGIPath сопоставлен с application.py

WSGIPath is set by default to application.py. Set to manage.py.

Обновите WSGIPath как показано в предыдущих ответах, или переименуйте в файл application.py.

Ответ 5

Конфигурация WSGI для меня была болезненной. Я изменил настройки WSCI с помощью команды eb config, но это не сработало. Ниже вы можете исправить это за 5 простых шагов.

1- Перемещена функция app.py в корень каталога (где я запустил команду eb init.

2- Также переименован в app.py как application.py и в этом инициализированном приложении в качестве application = Flask(__name__) not app = Flask(__name__)

3- eb deploy не работал после этого (в том же проекте) Я попытался исправить конфигурацию с помощью eb config, но было слишком волосаточно, чтобы разобраться. Удалите все .extensions, .gitignore и т.д. Из вашего проекта.

4- повторно инициализируйте проект на EB с помощью eb init и следуйте инструкциям. когда развертывание завершено, eb open запустит ваш webapp (надеюсь!)

Ответ 6

Когда я столкнулся с этой проблемой, это было потому, что я использовал графический интерфейс для загрузки zip файлов моих проектов. Первоначально я архивировал каталог уровня проекта и загружал этот zip в EB.

Затем я переключился на простую загрузку zip самих файлов проекта - то есть выделил все файлы и отправил их в zip - и тогда утилита загрузки GUI смогла найти мой файл application.py без проблем, потому что файл application.py был не в подпапке.

Ответ 7

Ну, в моем случае я следовал всему процессу и соглашениям, но все еще получал 404. Проблема была в моей виртуальной среде. Я игнорировал все папки/файлы, связанные с конфигурацией среды, в моем .gitignore, но не в .ebignore. После создания .ebignore и игнорирования всех папок/файлов, которые не были связаны с кодом проекта, исправлена проблема.