我正在尝试设置django-compressor和django-staticfiles,以便压缩的CSS / Javascript和图像来自Amazon的S3。我已经成功地使用S3作为后端设置了静态文件,所以它的
collectstatic
命令会将文件发送到S3而不是STATIC_ROOT
。然而,当我尝试将django-compressor
添加到混合中时,一切似乎都会崩溃。遵循documentation关于设置远程存储的说明,我创建了一个存储后端子类boto,因此我复制了example到storage.py
中。一旦我开始使用这个缓存后端,文件被复制到static_media而不是S3。在第一次页面加载之后,CACHE文件夹出现在S3和static_media文件夹中。将STATICFILES_STORAGE
和COMPRESS_STORAGE
设置回boto的正常S3类(storages.backends.s3boto.S3BotoStorage
)会导致静态资源被收集到S3存储桶中,而没有static_media文件夹。但是,尝试重新加载页面会抛出错误:Caught NotImplementedError while rendering: This backend doesn't support absolute paths.
使用标签{% compress css %}
,文件路径为compressor/base.py
进行代码高亮。
settings.py
中的部分:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'key'
AWS_SECRET_ACCESS_KEY ='secret'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
S3_URL = 'http://my-bucket.s3.amazonaws.com/'
MEDIA_ROOT = 'client_media'
MEDIA_URL = '/media/'
STATIC_ROOT = 'static_media'
STATIC_URL = S3_URL
ADMIN_MEDIA_PREFIX = S3_URL + 'admin/'
STATICFILES_DIRS = (
join(DIRNAME, 'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
COMPRESS_ENABLED = True
COMPRESS_URL = S3_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_STORAGE = 'storage.CachedS3BotoStorage'
STATICFILES_STORAGE = COMPRESS_STORAGE
那么我哪里做错了?也许在使用CachedS3BotoStorage
自定义存储时,我配置错误了吗?