#django #amazon-web-services #amazon-s3 #amazon-elastic-beanstalk #django-staticfiles
#django #amazon-web-services #amazon-s3 #amazon-elastic-beanstalk #django-staticfiles
Вопрос:
Я пытаюсь изменить свое приложение Django, чтобы использовать S3 для статического и мультимедийного хранения. Он работает без проблем на локальной машине, и я могу запустить «collectstatic» локально.
Когда я развертываюсь в экземпляре Elastic Beanstalk, я получаю эту ошибку:
ERROR Instance deployment failed. For details, see 'eb-engine.log'. INFO Command execution completed on all instances. Summary: [Successful: 0, Failed: 1]. ERROR Failed to deploy application.
В eb-engine.log:
[ERROR] An error occurred during execution of command [app-deploy] - [PostBuildEbExtension]. Stop running the command. Error: container commands build failed. Please refer to /var/log/cfn-init.log for more details.
В cfn-init.log
[INFO] -----------------------Starting build----------------------- [INFO] Running configSets: Infra-EmbeddedPostBuild [INFO] Running configSet Infra-EmbeddedPostBuild [INFO] Running config postbuild_0_LocalEyes_WebApp [ERROR] Command 00_collectstatic (source /var/app/venv/*/bin/activate amp;amp; python3 manage.py collectstatic --noinput) failed [ERROR] Error encountered during build of postbuild_0_LocalEyes_WebApp: Command 00_collectstatic failed Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config CloudFormationCarpenter(config, self._auth_config).build(worklog) File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build self._config.commands) File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply raise ToolError(u"Command %s failed" % name) cfnbootstrap.construction_errors.ToolError: Command 00_collectstatic failed [ERROR] -----------------------BUILD FAILED!------------------------ [ERROR] Unhandled exception during build: Command 00_collectstatic failed Traceback (most recent call last): File "/opt/aws/bin/cfn-init", line 176, in lt;modulegt; worklog.build(metadata, configSets) File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 135, in build Contractor(metadata).build(configSets, self) File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 561, in build self.run_config(config, worklog) File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config CloudFormationCarpenter(config, self._auth_config).build(worklog) File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build self._config.commands) File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply raise ToolError(u"Command %s failed" % name) cfnbootstrap.construction_errors.ToolError: Command 00_collectstatic failed
Похоже, в моей статической команде collect произошла ошибка. Я пробовал разные способы его написания и путался в своих settings.py файл, но я не могу понять, что вызывает эту ошибку.
Любая помощь или совет будут очень признательны!
Мой файл django.config:
container_commands: 00_collectstatic: command: "source /var/app/venv/*/bin/activate amp;amp; python3 manage.py collectstatic --noinput" 01_migrate: command: "source /var/app/venv/*/bin/activate amp;amp; python3 manage.py migrate" leader_only: true option_settings: aws:elasticbeanstalk:container:python: WSGIPath: my_project.wsgi:application aws:elasticbeanstalk:application:environment: DJANGO_SETTINGS_MODULE: my_project.settings IS_AWS: true AWS_ACCESS_KEY_ID: lt;KEYIDgt; AWS_SECRET_ACCESS_KEY: lt;ACCESSKEYgt; USE_S3: TRUE
Relevant settings.py code:
USE_S3 = os.getenv('USE_S3') == 'TRUE' if USE_S3: # aws settings AWS_STORAGE_BUCKET_NAME = "my-djangobucket" AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID') AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY') AWS_DEFAULT_ACL = None AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} AWS_S3_REGION_NAME = 'us-west-2' # s3 static settings STATIC_LOCATION = 'static' STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/' STATICFILES_STORAGE = 'my_project.storage_backends.StaticStorage' # s3 public media settings PUBLIC_MEDIA_LOCATION = 'media' MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/' DEFAULT_FILE_STORAGE = 'my_project.storage_backends.PublicMediaStorage' else: STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)