我最近在我的Django应用程序(1.4.1)上安装了Django Compressor(1.2)。直到我安装了django-compressor,当我运行collectstatic时,它会将我的静态文件通过boto完美地上传到S3而不会在本地其他地方复制它们。但是,当我安装django压缩器时,运行collectstatic:
A)将我的静态文件上传到S3,但用空文件替换所有本地版本。
B)将我的静态文件上传到S3,但将本地版本复制到我的根文件夹。
对于结果A,我有
COMPRESS_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'proj/static',)
对于结果B,我有
STATIC_ROOT = ''
COMPRESS_ROOT = STATIC_ROOT
我理解为什么B将文件复制到root,因为这是STATIC_ROOT的设置,但如果我注释掉COMPRESS_ROOT,则collectstatic会恢复正常(也就是说不会在本地修改任何内容而只是上传到S3)。我原以为COMPRESS_ROOT对collectstatic没有任何影响,因为STATIC_ROOT无论如何都保持不变。显然情况并非如此。
作为一种解决方法,我一直在做以下事情:
当我想运行python manage.py compress时,我将COMPRESS_ROOT设置如下:
COMPRESS_ROOT = os.path.join(os.path.abspath(os.path.dirname( file )),'proj / static',)
显然这是一个黑客,我想弄清楚如何让他们玩得很好。任何建议都将不胜感激。
以下相关代码: #settings.py
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(os.path.abspath(os.path.dirname(__file__)),'proj/static',),
)
AWS_STORAGE_BUCKET_NAME = #bucket-name
S3_URL = 'https://%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATIC_DIRECTORY = '/static/'
STATIC_URL = S3_URL + STATIC_DIRECTORY
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_URL = STATIC_URL
#COMPRESS_ROOT = STATIC_ROOT
#COMPRESS_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'proj/static',)
COMPRESS_STORAGE = 'travel.proj.services.storage.CachedS3BotoStorage'
STATICFILES_STORAGE = 'travel.proj.services.storage.CachedS3BotoStorage'
AWS_LOCATION = 'static'
COMPRESS_JS_FILTERS = [
'compressor.filters.template.TemplateFilter',
]
答案 0 :(得分:0)
我认为这可能与Django压缩器有关,而不是与存储设置有关。
Django-compressor需要一种方法来跟踪文件和更改,我认为它不能在远程存储上执行此操作。因此,对于使用django-compressor的远程存储,该包的作者建议将默认的S3BotoStorage
类子类化为documented here。
有关详细信息,也许this question可以为您提供帮助。