Проблема развертывания веб-приложения Django на AWS — ошибка при выполнении команды Collectstatic в сегменте S3Python

Программы на Python
Anonymous
Проблема развертывания веб-приложения Django на AWS — ошибка при выполнении команды Collectstatic в сегменте S3

Сообщение Anonymous »

Контекст
Я успешно разработал полное веб-приложение Django и в настоящее время нахожусь на этапе его развертывания. Моя база данных размещена на экземпляре AWS RDS Postgres. В рамках процесса развертывания я пытаюсь собрать статические файлы с помощью команды:

$ python Manage.py Collectstatic с намерением сохранить их в корзине AWS S3.
Проблема:
Однако во время процесса Collectstatic я столкнулся со следующей ошибкой:

botocore.Exceptions.ClientError: произошла ошибка (AccessControlListNotSupported) при вызове операции PutObject: сегмент не разрешает списки управления доступом
Подробности об ошибке:
Traceback (самый последний вызов — последний): Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\manage.py», строка 21, в основной() Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\manage.py», строка 17, в главном меню. выполнить_from_command_line(sys.argv) Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\core\management\__init__.py», строка 442, вexecute_from_command_line утилита.execute() Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\core\management\__init__.py», строка 436, в процессе выполнения self.fetch_command(подкоманда).run_from_argv(self.argv) Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\core\management\base.py», строка 412, в run_from_argv self.execute(*args, **cmd_options) Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\core\management\base.py», строка 458, в процессе выполнения вывод = self.handle(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py», строка 209, в дескрипторе собрано = self.collect() ^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py», строка 135, в сборе обработчик(путь, префикс_путь, хранилище) Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py», строка 378, в файле copy_file. self.storage.save(префиксный_путь, исходный_файл) Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\django\core\files\storage\base.py», строка 38, в сохранении name = self._save(имя, содержимое) ^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\storages\backends\s3.py», строка 494, в _save obj.upload_fileobj(content, ExtraArgs=params, Config=self.transfer_config) Файл «C:\Users\xmedi\OneDrive\Escritorio\Projects\Personal\postgram\venv\Lib\site-packages\boto3\s3\inject.py», строка 731, в object_upload_fileobj вернуть self.meta.client.upload_fileobj( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\boto3\s3\inject.py», строка 642, в upload_fileobj вернуть будущее.результат() ^^^^^^^^^^^^^^^^ Файл "C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\s3transfer\futures.py", строка 103, результат вернуть self._coordinator.result() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл "C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\s3transfer\futures.py", строка 266, результат поднять само._исключение Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\s3transfer\tasks.py», строка 139, в __call__ вернуть self._execute_main(kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\s3transfer\tasks.py», строка 162, в _execute_main return_value = self._main(**kwargs) ^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\User\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\s3transfer\upload.py», строка 764, в _main client.put_object(Bucket=ведро, Key=ключ, Body=body, **extra_args) Файл «C:\Users\user\OneDrive\Desktop\Projects\myapp\venv\Lib\site-packages\botocore\client.py», строка 553, в _api_call вернуть self._make_api_call(имя_операции, kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «C:\Users\user\OneDrive\Desktop\Projects\postgram\venv\Lib\site-packages\botocore\client.py», строка 1009, в _make_api_call поднять error_class (разобранный_ответ, имя_операции) botocore.Exceptions.ClientError: произошла ошибка (AccessControlListNotSupported) при вызове операции PutObject: В сегменте не разрешены списки ACL. Вырезанный код: setting.py импортировать ОС из пути импорта pathlib импортировать среду # Среда окружающая среда = окружающая среда.Env() окружающая среда.Env.read_env() BASE_DIR = Путь(__файл__).resolve().parent.parent SECRET_KEY = env('SECRET_KEY') ОТЛАДКА = окр('ОТЛАДКА') ALLOWED_HOSTS = [] INSTALLED_APPS = [ #Приложения Джанго 'django.contrib.admin', 'джанго.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #Локальные приложения 'посты', 'пользователи', #Сторонние приложения 'хранилища', ] ПРОМЕЖУТОЧНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # Пользовательское промежуточное программное обеспечение 'postgram.middleware.ProfileCompletionMiddleware', ] ROOT_URLCONF = 'postgram.urls' ШАБЛОНЫ = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'ДИРС': [ os.path.join(BASE_DIR, 'шаблоны') ], 'APP_DIRS': Верно, 'ПАРАМЕТРЫ': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'postgram.wsgi.application' # База данных в AWS RDS БАЗЫ ДАННЫХ = { "по умолчанию": { "ДВИГАТЕЛЬ": "django.db.backends.postgresql", 'ИМЯ': env('ИМЯ_БАЗЫ ДАННЫХ'), 'ПОЛЬЗОВАТЕЛЬ': env("DATABASE_USER"), 'ПАРОЛЬ': env("DATABASE_PASSWORD"), 'ХОСТ': env("DATABASE_HOST"), 'ПОРТ': env("DATABASE_PORT"), } } DEFAULT_AUTO_FIELD='django.db.models.AutoField' # Проверка пароля AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Интернационализация LANGUAGE_CODE = 'ru-ru' TIME_ZONE = 'UTC' USE_I18N = Истина USE_L10N = Истина USE_TZ = Истина ####### # АВС # ####### USE_S3 = env('USE_S3') == 'ИСТИНА' если USE_S3: # настроек AWS AWS_S3_VERITY = Истина DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_DEFAULT_ACL = Нет AWS_S3_REGION_NAME = 'нас-восток-1' AWS_S3_FILE_OVERWRITE = Ложь AWS_S3_SIGNATURE_NAME = 's3v4', AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID') AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY') AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME') AWS_DEFAULT_ACL = 'публичное чтение' AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} # Статические настройки S3 AWS_LOCATION = 'статический' STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/' STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' еще: STATIC_URL = '/staticfiles/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) MEDIA_URL = '/медиафайлы/' MEDIA_ROOT = os.path.join(BASE_DIR, 'медиафайлы') ################################################ ############## LOGIN_URL = '/пользователи/логин/' LOGIN_REDIRECT_URL = '/' LOGOUT_REDIRECT_URL = LOGIN_URL Конфигурации: Конфигурации корзины S3:
Изображение

Изображение

Разрешения группы пользователей:

Изображение

Попытавшиеся решения: [*][Django][AWS S3] botocore.Exceptions.clienterror произошла ошибка (доступ запрещен) при вызове операции PutObject [*]https://aws.plainenglish.io/s3-error-ac ... 8cc5b27e15 [*]https://zoveloper.medium.com/3-aws-s3-b ... 86b1fc8d42 Запрос о помощи:
Я был бы признателен за любые идеи, предложения или решения, которые помогут устранить эту ошибку «collectstatic» и успешно развернуть мое веб-приложение Django на AWS.

Вернуться в «Python»