使用S3 Subfolder作为Django collectstatic目的地

时间:2017-07-23 02:57:08

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

我正在使用AWS启动Django(1.11.x)项目(ElasticBeanstalk,S3,RDS)。使用boto3和django-storages应用程序我管理我的静态文件直接进入S3,直接进入存储桶。但是,S3存储桶还有一些与静态无关的其他文件和目录。出于这个原因,我想在S3桶中创建一个名为static的文件夹,并将所有静态文件推送到这个专门指定的目录中。

我的settings.py看起来像这样:

[...]
# Static files (CSS, JavaScript, Images)
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

AWS_ACCESS_KEY_ID = AWS_S3_MyKEY
AWS_SECRET_ACCESS_KEY = AWS_S3_MySECRET
AWS_STORAGE_BUCKET_NAME = 'elasticbeanstalk-us-west-2-1xxxxxxxxxxx1'
AWS_S3_CUSTOM_DOMAIN = '%s.s3-us-west-2.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_QUERYSTRING_AUTH = False


# general static / media settings
STATIC_URL = '/static/'
STATIC_ROOT = 'staticfiles'

MEDIA_URL = '%smedia/' % STATIC_URL 
MEDIA_ROOT = '/static/media/'
ADMIN_MEDIA_PREFIX = '%sadmin' % STATIC_URL 

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

我对Django有一些经验,但这是我的第一个涉及AWS和boto的项目。任何帮助,将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:1)

我在配置目录中创建custom_storages.py,如下所示:

from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage


class StaticStorage(S3Boto3Storage):
    location = settings.STATICFILES_LOCATION


class MediaStorage(S3Boto3Storage):
    location = settings.MEDIAFILES_LOCATION
    file_overwrite = False

然后在我的设置中:

STATICFILES_STORAGE = 'config.custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'config.custom_storages.MediaStorage'

您应该可以对DEFAULT_FILE_STORAGE执行相同的操作。祝你好运!

答案 1 :(得分:0)

在您的设置中,

AWS_LOCATION = settings.MEDIAFILES_LOCATION

答案 2 :(得分:0)

您可以使用AWS_LOCATION参考:https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#usage

AWS_STORAGE_BUCKET_NAME = 'mybucket'
AWS_LOCATION = 'mylife/myrules/'