Как настроить aws:elasticbeanstalk:container:python:staticfiles в Elastic Beanstalk?

Я пытаюсь запустить eb create для развертывания моего проекта Django на AWS. Я получаю ошибку ERROR: ServiceError - Configuration validation exception: Invalid option specification (Namespace: 'aws:elasticbeanstalk:container:python:staticfiles', OptionName: '/static/'): Unknown configuration setting.. Я не знаю, что означает эта ошибка, и я не могу найти много информации о ней.

Я пытался определить эту переменную в .ebextensions/django.config.

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
  aws:elasticbeanstalk:container:python:staticfiles:
    /static/: 'frontend/views/build/static/'

Мой settings.py настроен со следующими параметрами:

STATIC_URL = '/static/'
    
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'frontend/views/build/static')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Я пытаюсь запустить этот экземпляр ebs на Amazon Linux 2

Если ваша среда использует ветку платформы на базе Amazon Linux 2, используйте пространство имен aws:elasticbeanstalk:environment:proxy:staticfiles.

Следующий пример конфигурационного файла указывает прокси-серверу обслуживать файлы:

Пример .ebextensions/django.config

option_settings:
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /static/: static

Примечание:

  1. Ваши статические файлы собраны в STATIC_ROOT пути, а не в STATICFILES_DIRS

Ах да, документация по Amazon Linux 2 не совсем в курсе дела.

  1. обновите ваш django.config следующим образом:
option_settings:
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /static: /path/to/static
  1. убедитесь, что ваши статические файлы собираются при развертывании, для этого мы можем использовать крючки :

Создайте postdeploy хук файл под названием .platform/hooks/01_collect_static.sh и сделайте его исполняемым с помощью chmod.

Введите следующее содержание:

#!/bin/bash

source "$PYTHONPATH/activate" && {

  python manage.py collectstatic --noinput;

}

При развертывании django теперь будет собирать ваши статические файлы в папку, которую вы определили в settings.py.

Обратите внимание, я также включаю сюда команду migrate, так что мой файл hook выглядит так:

#!/bin/bash

source "$PYTHONPATH/activate" && {  
    
  if [[ $EB_IS_COMMAND_LEADER == "true" ]];
  then 
    # log which migrations have already been applied
    python manage.py showmigrations;
    # migrate
    python manage.py migrate --noinput;
  else 
    echo "this instance is NOT the leader";
  fi
  python manage.py collectstatic --noinput;

}
Вернуться на верх