Как развернуть структурированное приложение 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 вещи:
-
Обновите файл 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.py
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: manage.py
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "application/static/"
Это позволило Elastic Beanstalk найти приложение, вызываемое правильно.
Это кратко описано в официальных документах и более подробно описано в этом посте.
РЕДАКТИРОВАТЬ - см. Структуру проекта ниже
- ProjectRoot
- .ebextensions
- приложение
- статический
- шаблоны
- тесты
- 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 и игнорирования всех папок/файлов, которые не были связаны с кодом проекта, исправлена проблема.