Подтвердить что ты не робот

Настройка Django на AWS Elastic Beanstalk: WSGIPath не найден

Я уже несколько дней пытаюсь настроить Django под Amazon Web Services Elastic Beanstalk. Я думаю, что проблема, которую я поражаю, такова:

ERROR - Your WSGIPath refers to a file that does not exist.

Я следил за учебником здесь, и все идет хорошо до конца шага 6, но я не могу на всю жизнь получить что-либо для отображения другой, кроме общей Эластичной страницы Beanstalk, с шага 5, № 2. Когда я запустил

./manage.py runserver

на моей локальной машине, все работает так, как должно, но я не могу развернуть эту страницу. Я сначала попробовал с маленького сайта Django, который написал сам. Это не сработало, поэтому я удалил все, что я сделал, и попробовал еще раз, но это не сработало, поэтому я удалил все это и снова попробовал новую установку django. Я пробовал, что куча раз возится с мелочами, но я думаю, что мне не хватает чего-то серьезного.

Я добавил файл python.config, как описано в этот учебник.

Здесь моя файловая структура:

-.git/
-.mysite/
    -myapp/
        -__init__.py
        -models.py
        -tests.py
        -views.py
    -mysite/
        -__init__.py
        -settings.py
        -urls.py
        -wsgi.py
    -.ebextensions/
        -python.config
    -manage.py
    -mysite.db
    -requirements.txt

Из моих настроек .py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mysite.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

Здесь python.config:

container_commands:   01_syncdb:    
    command: "django-admin.py syncdb --noinput"
    leader_only: true

option_settings:
    - namespace: aws:elasticbeanstalk:container:python
      option_name: WSGIPath
      value: mysite/wsgi.py
    - option_name: DJANGO_SETTINGS_MODULE
      value: mysite.settings
    - option_name: AWS_SECRET_KEY
      value: <This is my secret key>
    - option_name: AWS_ACCESS_KEY_ID
      value: <This is my access key>

Есть ли другое место для определения моего WSGIPath? Есть ли способ сделать это через консоль AWS? Должен ли я просто полностью пропустить EB и использовать EC2 напрямую?

4b9b3361

Ответ 1

От https://forums.aws.amazon.com/thread.jspa?messageID=396656&#396656

Каталог ".ebextensions" должен находиться в корневом каталоге вашего приложения, но из выходного файла журнала каталог находится в каталоге "mysite/.ebextensions". Так, например, после выполнения руководства django в документах при запуске "git aws.push" ваш корневой каталог будет выглядеть так:

.
├── .ebextensions
│   └── python.config
├── .elasticbeanstalk
│   ├── config
├── .git
├── .gitignore
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── requirements.txt

Вместо этого:

.
└── mysite
    ├── .ebextensions
    ├── .elasticbeanstalk
    ├── .git
    ├── .gitignore
    ├── manage.py
    ├── mysite
    └── requirements.txt

Ответ 2

Найдите .elasticbeanstalk/optionsettings.your-app-name в корневом каталоге приложения. Найдите WSGIPath и убедитесь, что это путь, который вы собираетесь использовать. Похоже, что он по умолчанию равен application.py.

Ответ 3

У меня была такая же проблема ( "Ваш WSGIPath ссылается на файл, который не существует" ), и, наконец, нашел решение:

  • Проблема: я загружал пакет проекта непосредственно из GitHub ( "Download Zip" ), который, возможно, имел неправильную структуру.
  • Решение: я правильно застегиваю файлы без основной папки, используя команду "Сжать". (cf http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deployment.source.html).

Примечание. Сначала я искал неправильное направление, потому что EB также показывал это сообщение: Ошибка произошла во время сборки: команда 01_migrate не удалась. Поэтому, хотя файлы, включая *.config, были правильно расположены.

Ответ 4

Хорошо, вот что помогло мне после попытки миллиона вещей. Вы должны запустить eb update, чтобы обновить среду.

Итак, убедитесь, что .elasticbeanstalk/optionsettings.whatever-env имеет WSGIPath, установленный для того, что вы хотите, и убедитесь, что .ebextensions/whatever.config имеет следующее:

option_settings:
  - namespace: aws:elasticbeanstalk:container:python
    option_name: WSGIPath
    value: whatever/wsgi.py

Затем запустите eb update, и он должен работать. Помните, что вы должны установить псевдоним, чтобы убедиться, что ваша команда eb действительно работает. Например:

alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb"

Ответ 5

У меня была такая же проблема после того, как я прочитал документы AWS. Что я сделал, чтобы избежать этого, шаг за шагом инициализировал приложение через EB CLI, не используя команду, предписанную документами AWS (~/ebdjango $eb init -p python2.7 django-tutorial), и создание среды шаг за шагом также. Шаги, которые я предпринял в EB CLI, следующие:

  • Инициализировать приложение
    • eb init
    • Выберите область по умолчанию
    • Введите имя приложения (используется по умолчанию, нажав клавишу ввода)
    • Подтверждено, что я использую Python
    • Выбранная версия Python, совместимая с моей локальной средой
    • Настройка SSH
  • Создать среду
    • eb create
    • Введите имя среды (используется по умолчанию, нажав клавишу ввода)
    • Введите префикс DNS CNAME (используется по умолчанию, нажав enter)
    • Выберите тип балансировки нагрузки (я выбрал классический, введя 1)

После создания среды я использую eb config, чтобы открыть файл конфигурации EB, чтобы убедиться, что путь к моему WSGI - это то, что должно быть:

aws:elasticbeanstalk:container:python:
  NumProcesses: '1'
  NumThreads: '15'
  StaticFiles: /static/=static/
  WSGIPath: path/to/wsgi.py

Если какие-либо изменения сделаны, убедитесь, что вы сохранили файл и подтвердили, что все вставлено в квадрат, введя eb open в свой терминал, чтобы открыть окно браузера, используя имя домена, указанное на предыдущих шагах.

Ответ 6

Решение: использование EBCLI

open eb config Для меня это показывало WSGIPath: application.py Теперь измените его на

WSGIPath: my_app/wsgi.py

сохранить и развернуть.