Django collectstatic не дает ошибок.Но статические файлы не загружаются на веб-сайт с отладкой true и false.Файлы на S3 - PullRequest
0 голосов
/ 28 января 2019

Введение: Я подал заявку в Django. Я пытаюсь разместить мои статические и мультимедийные файлы в aws s3.Мой проект Django работает на AWS Lambda и AWS Api gateway с использованием Zappa.ниже мой файл settings.py

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Затем я создал файл в папке моего проекта, такой же, как файл manage.py с именем aws_storage_classes.py

Ниже приводится содержимое моего файла aws_storage_classes.py

from storages.backends.s3boto3 import S3Boto3Storage    

class StaticStorage(S3Boto3Storage):
    location = 'static'

class MediaStorage(S3Boto3Storage):
    location = 'media'

Ниже мои urls

if settings.DEBUG:

    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Также в моих settings.py

ОТЛАДКА= False

Когда я делаю python manage.py collectstatic, все статические файлы загружаются, и я не получаю никаких ошибок.Но при переходе на страницу администратора статические файлы не загружаются.См. Изображения ниже

Ниже приведено изображение моего ковша S3

enter image description here

Ниже приводится то, чтонаходится внутри статической папки

enter image description here

Статические файлы не загружаются

enter image description here

<link rel="stylesheet" type="text/css" href="https://<bucketname>.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAJHJGHJGJGJGJJGJGJMHIFQ&amp;Signature=yfS3%2BvA0q15aUxw7OBySuQWZfjg%3D&amp;x-amz-security-token=FQoGZXIvYXdgljdaksfgdjsgfkjertert;hre;thtires=151232173">

Обновлен settings.py

AWS_DEFAULT_ACL = None
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
DEFAULT_FILE_STORAGE = 'aws_storage_classes.MediaStorage'
AWS_ACCESS_KEY_ID = os.getenv("ACCESS_KEY")
AWS_SECRET_ACCESS_KEY = os.getenv("ACCESS_SECRET_KEY")
AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
STATICFILES_STORAGE = 'aws_storage_classes.StaticStorage'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_DOMAIN = "%s.s3.amazonaws.com" % AWS_STORAGE_BUCKET_NAME

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Ниже приведена ссылка после добавления ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

<link rel="stylesheet" type="text/css" href="https://django-static-media.s3.amazonaws.com/static/style.css?AWSAccessKeyId=AKIAGGGGGGGGGMHIFQ&amp;Signature=6gFQTsOSDFSDFA%3D&amp;x-amz-security-token=FQoGZvwbJhd9amp;Expires=1549168642">

Статические файлы по-прежнему не загружаются

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

Ниже приведены мои разрешения. Я пытался дать разрешение лямбда-функции, но это дает мне ошибку ниже

enter image description here

enter image description here

После изменения статического URL и URL-адреса носителя

enter image description here

1 Ответ

0 голосов
/ 05 февраля 2019

Я вижу, STATIC_URL и MEDIA_URL настроены неправильно.

изменить

STATIC_URL = 'https://%s.static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s.media/' % AWS_S3_DOMAIN

На

STATIC_URL = 'https://%s/static/' % AWS_S3_DOMAIN
MEDIA_URL = 'https://%s/media/' % AWS_S3_DOMAIN

Должно работать.

Следующая ссылка имеет очень хорошее объяснение.https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

...