Как развернуть структурированное приложение 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 вещи:
-
обновить мой 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)
-
создать
.ebextensions/myapp.config
, и определите следующий блок для указания manage.pyoption_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, и т. д.
- .ebextensions
начиная с 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
как показано в предыдущих ответах или переименовать в .
конфигурация 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 файл без проблем.