AWS Elasti c Beanstalk: неверный путь WSGI? - PullRequest
7 голосов
/ 27 мая 2020

Я пытаюсь развернуть свое первое приложение на EB и следую за этим туториалом: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

К сожалению, я все еще получаю ошибку 502 при развертывании финальное приложение. Я сбит с толку, потому что следовал указаниям к тройнику.

Я получаю следующую ошибку

ImportError: Failed to find application, did you mean 'ebdjango/wsgi:application'?

Я не понимаю, что это значит. В соответствии с инструкциями я отредактировал файл django .config, включив в него этот текст:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py

Это похоже на мою файловую структуру:

- ebdjango
  -.ebextensions
    - django.config
  - .elasticbeanstalk
  - ebdjango
    _ __init__.py
    - settings.py
    - urls.py
    - wsgi.py
  - manage.py
  - requirements.txt

Итак, файл конфигурации установлен правильно, верно?

Я использую Python 3,7 и Django 2,2.

Я знаю, что EB ищет application.py, и я думал, что файл конфигурации должен указывать сервер на мое настраиваемое приложение? Что мне здесь не хватает?

EDIT: я также получаю эту ошибку:

ModuleNotFoundError: No module named 'ebdjango/wsgi'

Что-то не так с моей файловой структурой?

EDIT 2: Я забыл чтобы включить файл init .py в мой пост, см. комментарий Бена.

Ответы [ 3 ]

3 голосов
/ 02 июня 2020

У меня была такая же проблема. Это из-за образа машины Amazon Linux 2. Его файлы конфигурации несовместимы с файлами старой версии. См .: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.migration-al.html. В итоге я использовал старую версию, потому что в документации сказано:

Если вы используете бета-версию платформы Amazon Linux 2 для вашей оценки, не используйте go для производства. Подождите, пока мы не выпустим поддерживаемую версию платформы.

Вы можете создать среду Elasti c Beanstalk, используя образ компьютера Amazon Linux (старая версия) с помощью инструмента командной строки. Вот команды (замените <...> своими данными):

eb init -p python-3.6 <ApplicationName> --region <Region>
eb create <EnvironmentName> --elb-type application --platform "64bit Amazon Linux 2018.03 v2.9.10 running Python 3.6"

Обновление 2020-06-02 Как я уже упоминал ранее, проблема вызвана Amazon Linux 2 платформе, потому что он использует Gunicorn, синтаксис которого отличается от синтаксиса WSGI предыдущей версии. WSGIPath должно быть ebdjango.wsgi:application. См. https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html#python -пространства имен .

1 голос
/ 30 мая 2020

У меня была такая же проблема сегодня, когда я возился с файлом django .config. Наконец, у меня это сработало, когда я изменил путь WSGI на вкладке конфигурации на eb django .wsgi: application.

0 голосов
/ 29 мая 2020

В вашем django .config измените:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi

И в вашем

import os
from django.core.wsgi import get_wsgi_application
os.environ["DJANGO_SETTINGS_MODULE"] = "ebdjango.settings"
application = get_wsgi_application()
...