如何使用django压缩器与apache?

时间:2012-04-13 18:17:57

标签: django apache django-compressor

我一直在使用Django Compressor来管理我的咖啡/更少的文件,它非常适合开发,但是我有一些问题要让它适用于我的生产部署。

我的想法是让apache托管静态文件,可能在另一台服务器上。我在COMPRESS_OFFLINE = True文件上设置settings.py

然后我做以下

  • python manage.py compress - 填充CACHE目录中的static目录,其中将收集所有静态文件。
  • python manage.py collectstatic - 这会将我项目中所有应用程序(其中一些不使用压缩程序)的静态文件收集到我的static目录中。
  • static目录复制到要使用apache托管的某个位置。并设置apache来提供文件。
  • 修改static_url文件中的settings.py变量以指向静态服务器。

如果我打开任何页面,我的服务器上会出现以下错误,只有在DEBUG = False文件上有COMPRESS_OFFLINE = Truesettings.py时才会出现这种情况:

  

TemplateSyntaxError:渲染时捕获OfflineGenerationError:   您启用了脱机压缩但是密钥   离线清单中缺少“777ba26736d046ab043dc151e7e9a060”。   您可能需要运行“python manage.py compress”。

当我检查static/CACHE目录时,我确认错误是什么,这是我的manifest.json文件:

{
  "6189b8598993d1cbdbd35d4dfd1a6711": "<script type=\"text/javascript\" src=\"http://192.168.1.123/CACHE/js/2f6ca6616bd6.js\"></script>",
  "5c66dbed0e5b766c6e32773cd8585f3c": "<link rel=\"stylesheet\" href=\"http://192.168.1.123/CACHE/css/154d95903951.css\" type=\"text/css\" />"
}

如果我删除CACHE目录并重新运行python manage.py compress,我会在错误消息和清单文件上获得一组新ID,但清单上仍然缺少错误ID。

所以,我想这里有两个问题。为什么不起作用?实现这个目标的正确方法是什么?

感谢。

3 个答案:

答案 0 :(得分:15)

如果您已经运行压缩,但仍然收到消息

  

OfflineGenerationError:您已启用离线压缩,但脱机清单中缺少密钥“4971a40e3b459a8cda8287a7f7caa96d”。您可能需要运行“python manage.py compress”

那么你可能在压缩标签中有动态内容。确保compress始终是最里面的块,并且压缩块内没有标记。

答案 1 :(得分:3)

我猜你使用的是django-compressor 1.1.2,它不支持静态模板标签{%static“...”%}。

尝试使用以下命令安装django-compressor的开发版本。

  

pip install django_compressor == dev

它应该解决问题。

答案 2 :(得分:0)

David Wolfe是绝对正确的:必须深入挖掘我的所有代码以摆脱{%trans ...等。 我这样做:

<script>
window.__enter_email = "{% trans "Enter correct email" %}"
window.__url = "{% url "shop:go" %}"
</script>
{% compress js %}
<script>
$("#bla")..... window.__enter_email ...
</script>
{% endcompress %}

希望,帮助别人!