Как развернуть структурированное приложение Flask на AWS elastic beanstalk

после успешного развертывания тестового приложения с помощью описанных здесь шагов: 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 применение к эластичному бобовому стеблю?

6 ответов


добавить .ebextensions/<env-name>.config:

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

обновление:

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


я столкнулся с аналогичной проблемой развертывания приложения 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/" 
    

это позволяет эластичный Бобовый Стебель найти приложение вызывается правильно.

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

EDIT-см. структуру проекта ниже

  • ProjectRoot
    • .ebextensions
      • приложение.config
    • приложения
      • главная
        • forms.py
        • views.py
    • static
    • шаблоны
    • тесты
    • manage.py
    • требований.txt
    • config.py
    • etc, и т. д.

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


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

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

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

обновить WSGIPath как показано в предыдущих ответах или переименовать в .


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

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

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

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

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


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

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