Django 1.3 staticfiles + django-compressor + CloudFront

问题描述:

我们正在研究使用Django 1.3的staticfiles + django-compressor来获取CloudFront上的媒体。但是,我们很难找出将最新URL添加到唯一缓存拦截器的最佳方式,因此我们不必费尽心思创建新的分发或失效请求。Django 1.3 staticfiles + django-compressor + CloudFront

有没有人有任何如何使用staticfiles + django-compressor做到这一点的例子?例如,

/aks290209sdlk/media/css/base.css 

每次我们部署,改变散:

/fslk39sod/media/css/base.css 

这意味着{%静态%}模板标签也需要意识到的改变。我们有多个应用程序服务器,因此无论我们需要在它们之间保持同步。

+0

对不起,但我真的不明白这个问题; django-compressor会根据文件的mtime或根据其内容计算(用户可定义)自动命名文件。如果您打算将静态文件部署到CDN,他们实际上建议使用该文件的内容,因为mtime可能会因当前正在使用的服务器而有所不同。无论哪种方式,更改文件将导致一个全新的文件名,所以实际上没有缓存可以破解。 – 2012-02-03 22:27:17

这不是您的问题的答案,而是因为您说您正在评估资产管理人员,这并不完全偏离主题。

我不太了解django压缩机,但我个人发现其他资产管理器更容易/更好用。您可以从:http://www.djangopackages.com/grids/g/asset-managers/中选择一个,具体取决于您的具体需求。我正在使用django-mediagenerator,它使用起来非常简单但功能强大。首先,你在你的settings.py定义媒体包:

MEDIA_BUNDLES = (
    ('main.css', 
     'css/reset.css', 
     'css/design.css', 
    ), 
    ('main.js', 
     'js/jquery.js', 
     'js/jquery.autocomplete.js', 
    ), 
) 

然后定义媒体处理路径,也settings.py:

ROOT_MEDIA_FILTERS = { 
    'js': 'mediagenerator.filters.yuicompressor.YUICompressor', 
    'css': 'mediagenerator.filters.yuicompressor.YUICompressor', 
} 

- 你可以结合脚本,然后压缩,合并成一个文件,给他们加上散列等等。

然后你只需要打电话:./manage.py generatemedia和voila(好吧,不是很完美 - 你需要在settings.py中输入更多的设置,但是没有什么难以理解的) 。

在它看起来像这样的模板:

{% include_media 'main.css' media='screen,print' %} 
<img src="{% media_url 'some/image.png' %}" /> 

正如你可以看到这是Django的压缩机做法相反 - 这里,你确定你的资产在settings.py前期,然后引用它们。

+2

呃。无需在settings.py文件中列出每一个静态文件是使用django-compressor的主要优点之一。谁首先认为这将是一个好主意,是一个虐待狂。 – 2012-02-03 22:24:22

+0

@Chris:如果你想开始一场火焰战争,那么让我们转到聊天:-) – 2012-02-03 22:55:38

你可能将DEBUG设置为True吗?我相信django-compressor只会在DEBUG = False时进行散列。