Django collectstatic没有给出任何错误。但是staticfiles无法在网站上加载。 S3上的文件。 Zappa在Lambda上进行项目

时间:2019-02-03 02:02:41

标签: python django amazon-web-services amazon-s3 django-staticfiles

简介:我已经在Django中创建了我的应用程序,我试图将我的静态文件和媒体文件托管在aws s3中。我的Django项目在AWS LambdaAWS 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

  

DEBUG = 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">

1 个答案:

答案 0 :(得分:0)

问题在于您的网址应为/static/admin/style.css / ....要解决此问题,请将以下内容添加到您的settings.py文件中。

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'