django的collectstatic收集到意外目录中

时间:2019-02-11 19:25:44

标签: django amazon-s3 boto3

我想将我的静态文件上传到Amazon s3存储,但是我不能阻止django仅仅将它们放在项目根目录中的 staticfiles 目录中。我的requirements.txt文件中有boto3,并已设置

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

我已成功将带有媒体文件的s3设置到同一存储桶(位于不同目录下)。

当我注释掉s3设置时,Collectstatic似乎也忽略了settings.py中的STATIC_ROOT变量。运行python3 manage.py collectstatic时,我希望它可以将静态文件收集到STATIC_ROOT中,如此处https://docs.djangoproject.com/en/2.1/ref/settings/(在static_root下)的文档所述。但是,即使我给STATIC_ROOT赋予了不同的值,collectstatic也会始终收集到根目录下的名为 staticfiles 的目录中。

STATIC_ROOT = os.path.join(BASE_DIR, 'this_is_not_used_by_collectstatic')

我的s3其余设置:

# Amazon S3 
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']

AWS_STORAGE_BUCKET_NAME = 'my_bucket_name'
AWS_S3_REGION_NAME = 'eu-north-1'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = None
AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# media
DEFAULT_FILE_STORAGE = 'korvir.storage_backends.MediaStorage'

1 个答案:

答案 0 :(得分:1)

如果您使用的是django-heroku,并且按照说明在代码中包含以下内容:

django_heroku.settings(locals())

...,那么它将覆盖您的STATIC_ROOT设置。如果您要保留自己的STATIC_ROOT设置,请确保在调用STATIC_ROOT之后设置django_heroku.settings