无法将Django静态文件保存到AWS S3

时间:2019-06-13 05:25:00

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

在将静态文件部署到S3时遇到一个奇怪的问题。

我安装了boto3和django-storages。

  

Django:2.1.2

     

Python:3.6.7

在本地运行时,我的静态文件设置如下,

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')
STATIC_DIR = os.path.join(BASE_DIR,'static')
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    STATIC_DIR,
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

当我要将静态文件保存到S3存储桶时,我将设置更改为

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

AWS_ACCESS_KEY_ID = 'key'
AWS_SECRET_ACCESS_KEY = 'key'
AWS_STORAGE_BUCKET_NAME = 'name'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_STATIC_LOCATION = 'static'
AWS_MEDIA_LOCATION  = 'media'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_STATIC_LOCATION)
STATIC_ROOT = STATIC_URL
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_MEDIA_LOCATION)
MEDIA_ROOT = MEDIA_URL

STATICFILES_STORAGE  = 'main.storage_backends.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'main.storage_backends.MediaStorage'

storage_backends.py

from storages.backends.s3boto3 import S3Boto3Storage

StaticRootS3BotoStorage = lambda: S3Boto3Storage(location='static')

class MediaStorage(S3Boto3Storage):
    location = 'media'
    file_overwrite = False

运行后,

  

python manage.py collectstatic

我仍然收到以下提示,

  

您已请求在目标位置收集静态文件   您的设置中指定的位置:       / home / drogon / Crowdsocial_project / staticfiles

     

这将覆盖现有文件!   您确定要这样做吗?

它仍然保存在本地的staticfiles目录中,而不是s3上。 我在做什么错了?

我遵循了这两个教程

https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html

https://www.codingforentrepreneurs.com/blog/s3-static-media-files-for-django/

0 个答案:

没有答案