Как настроить 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
Примечание:
- Ваши статические файлы собраны в
STATIC_ROOT
пути, а не вSTATICFILES_DIRS
Ах да, документация по Amazon Linux 2 не совсем в курсе дела.
- обновите ваш django.config следующим образом:
option_settings:
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: /path/to/static
- убедитесь, что ваши статические файлы собираются при развертывании, для этого мы можем использовать крючки :
Создайте 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;
}