68 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
.. _scenarios:
 | 
						|
 | 
						|
Common Deployment Scenarios
 | 
						|
===========================
 | 
						|
 | 
						|
This document presents the most typical scenarios in which Django Compressor
 | 
						|
can be configured, and should help you decide which method you may want to
 | 
						|
use for your stack.
 | 
						|
 | 
						|
In-Request Compression
 | 
						|
----------------------
 | 
						|
 | 
						|
This is the default method of compression. Where-in Django Compressor will
 | 
						|
go through the steps outlined in :ref:`behind_the_scenes`. You will find
 | 
						|
in-request compression beneficial if:
 | 
						|
 | 
						|
* Using a single server setup, where the application and static files are on
 | 
						|
  the same machine.
 | 
						|
 | 
						|
* Prefer a simple configuration. By default, there is no configuration
 | 
						|
  required.
 | 
						|
 | 
						|
Caveats
 | 
						|
-------
 | 
						|
 | 
						|
* If deploying to a multi-server setup and using
 | 
						|
  :attr:`~django.conf.settings.COMPRESS_PRECOMPILERS`, each binary is
 | 
						|
  required to be installed on each application server.
 | 
						|
 | 
						|
* Application servers may not have permissions to write to your static
 | 
						|
  directories. For example, if deploying to a CDN (e.g. Amazon S3)
 | 
						|
 | 
						|
Offline Compression
 | 
						|
-------------------
 | 
						|
 | 
						|
This method decouples the compression outside of the request
 | 
						|
(see :ref:`behind_the_Scenes`) and can prove beneficial in the speed,
 | 
						|
and in many scenarios, the maintainability of your deployment.
 | 
						|
You will find offline compression beneficial if:
 | 
						|
 | 
						|
* Using a multi-server setup. A common scenario for this may be multiple
 | 
						|
  application servers and a single static file server (CDN included).
 | 
						|
  With offline compression, you typically run ``manage.py compress``
 | 
						|
  on a single utility server, meaning you only maintain
 | 
						|
  :attr:`~django.conf.settings.COMPRESS_PRECOMPILERS` binaries in one
 | 
						|
  location.
 | 
						|
 | 
						|
* You store compressed files on a CDN. 
 | 
						|
 | 
						|
Caveats
 | 
						|
-------
 | 
						|
 | 
						|
* If your templates have complex logic in how template inheritance is done
 | 
						|
  (e.g. ``{% extends context_variable %}``), then this becomes a problem,
 | 
						|
  as offline compression will not have the context, unless you set it in
 | 
						|
  :attr:`~django.conf.settings.COMPRESS_OFFLINE_CONTEXT`
 | 
						|
 | 
						|
* Due to the way the manifest file is used, while deploying across a
 | 
						|
  multi-server setup, your application may use old templates with a new
 | 
						|
  manifest, possibly rendering your pages incoherent. The current suggested
 | 
						|
  solution for this is to change the
 | 
						|
  :attr:`~django.conf.settings.COMPRESS_OFFLINE_MANIFEST` path for each new
 | 
						|
  version of your code. This will ensure that the old code uses old
 | 
						|
  compressed output, and the new one appropriately as well.
 | 
						|
 | 
						|
Every setup is unique, and your scenario may differ slightly. Choose what
 | 
						|
is the most sane to maintain for your situation.
 |