1

我最近在我的 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 将文件复制到根目录,因为这是 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',)

  • 当我想运行 python manage.py collectstatic 时,我注释掉 COMPRESS_ROOT,它将 collectstatic 返回到它的预 django-compressor 功能。

显然这是一个 hack,我想弄清楚如何让他们玩得很好。任何建议将不胜感激。

相关代码如下:#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',
]
4

1 回答 1

0

我认为这可能与 Django 压缩器有关,而不是与您的存储设置有关。

Django-compressor 需要一种方法来跟踪文件和更改,我认为它不能在远程存储上做到这一点。因此,对于使用 django-compressor 的远程存储,包的作者建议对默认S3BotoStorage类进行子类化,如此所述。

有关更多信息,也许这个问题可以帮助你。

于 2013-06-03T11:44:31.133 回答