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
这意味着{%静态%}模板标签也需要意识到的改变。我们有多个应用程序服务器,因此无论我们需要在它们之间保持同步。
这不是您的问题的答案,而是因为您说您正在评估资产管理人员,这并不完全偏离主题。
我不太了解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前期,然后引用它们。
呃。无需在settings.py文件中列出每一个静态文件是使用django-compressor的主要优点之一。谁首先认为这将是一个好主意,是一个虐待狂。 – 2012-02-03 22:24:22
@Chris:如果你想开始一场火焰战争,那么让我们转到聊天:-) – 2012-02-03 22:55:38
你可能将DEBUG设置为True吗?我相信django-compressor只会在DEBUG = False时进行散列。
对不起,但我真的不明白这个问题; django-compressor会根据文件的mtime或根据其内容计算(用户可定义)自动命名文件。如果您打算将静态文件部署到CDN,他们实际上建议使用该文件的内容,因为mtime可能会因当前正在使用的服务器而有所不同。无论哪种方式,更改文件将导致一个全新的文件名,所以实际上没有缓存可以破解。 – 2012-02-03 22:27:17