5
votes

I'm been using Django Compressor to manage my coffee/less files and its great for development, but I've had some issues to make it work for my production deployment.

My idea is to have apache to host the static files, possibly in another server. I'm setting COMPRESS_OFFLINE = True on the settings.py file.

Then I do the following

  • python manage.py compress - This populates the CACHE directory in my static directory, where all static files will be collected.
  • python manage.py collectstatic - This collects static files from all the apps on my project (some of which don't use compressor) into my static directory.
  • Copy the static directory somewhere to be hosted with apache. And setup apache to serve the files.
  • Modify the static_url variable in the settings.py file to point to the static server.

If I open any page, I get the following error on my server, this only seems to happen when I have DEBUG = False and COMPRESS_OFFLINE = True on my settings.py file:

TemplateSyntaxError: Caught OfflineGenerationError while rendering: You have offline compression enabled but key "777ba26736d046ab043dc151e7e9a060" is missing from offline manifest. You may need to run "python manage.py compress".

When I check the static/CACHE directory, I confirm what the error says, this is my manifest.json file:

{
  "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\" />"
}

If I delete the CACHE directory and rerun python manage.py compress, I get a new set of ID's both on the error message and the manifest file, but the ID on the error is still missing on the manifest.

So, I guess there are two questions here. Why is it not working? What is the proper way to achieve this?

Thanks.

3
Do you have compressor's finder in STATICFILES_FINDERS in settings? - ilvar
Please show your template code where you use the {% compress %} tag, that would help debugging the TemplateSyntaxError :) - vdboor

3 Answers

15
votes

If you've run compress, and you still get the message

OfflineGenerationError: You have offline compression enabled but key "4971a40e3b459a8cda8287a7f7caa96d" is missing from offline manifest. You may need to run "python manage.py compress"

then it's likely you have dynamic content inside compress tags. Make sure that compress is always the innermost block, and that there are no tags inside the compress block.

3
votes

I guess you're using django-compressor 1.1.2 which doesn't support static template tag {% static "..." %}.

Try installing the dev version of django-compressor with:

pip install django_compressor==dev

It should solve the problem.

0
votes

David Wolfe is absolutely right: had to dig throught all the code of mine to get rid of {% trans... etc. I make it like this:

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

Hope, helps someone!