.. _ref-storages:
========
Storages
========
Using with staticfiles
======================
Pipeline is providing a storage for `staticfiles app `_,
to use it configure ``STATICFILES_STORAGE`` like so ::
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
And if you want versioning use ::
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
There is also non-packing storage available, that allows you to run ``collectstatic`` command
without packaging your assets. Useful for production when you don't want to run compressor or compilers ::
STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineStorage'
Also available if you want versioning ::
STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineCachedStorage'
If you use staticfiles with ``DEBUG = False`` (i.e. for integration tests
with `Selenium `_) you should install the finder
that allows staticfiles to locate your outputted assets : ::
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
)
If you use ``PipelineCachedStorage`` you may also like the ``CachedFileFinder``,
which allows you to use integration tests with cached file URLs.
If you want to exclude Pipelinable content from your collected static files,
you can also use Pipeline's ``FileSystemFinder`` and ``AppDirectoriesFinder``.
These finders will also exclude `unwanted` content like READMEs, tests and
examples, which are particularly useful if you're collecting content from a
tool like Bower. ::
STATICFILES_FINDERS = (
'pipeline.finders.FileSystemFinder',
'pipeline.finders.AppDirectoriesFinder',
'pipeline.finders.CachedFileFinder',
'pipeline.finders.PipelineFinder',
)
GZIP compression
================
Pipeline can also creates a gzipped version of your collected static files,
so that you can avoid compressing them on the fly. ::
STATICFILES_STORAGE = 'your.app.GZIPCachedStorage'
The storage need to inherit from ``GZIPMixin``: ::
from django.contrib.staticfiles.storage import CachedStaticFilesStorage
from pipeline.storage import GZIPMixin
class GZIPCachedStorage(GZIPMixin, CachedStaticFilesStorage):
pass
Using with other storages
=========================
You can also use your own custom storage, for example, if you want to use S3 for your assets : ::
STATICFILES_STORAGE = 'your.app.S3PipelineManifestStorage'
Your storage only needs to inherit from ``PipelineMixin`` and ``ManifestFilesMixin`` or ``CachedFilesMixin``.
In Django 1.7+ you should use `ManifestFilesMixin `_
unless you don't have access to the local filesystem in which case you should use ``CachedFilesMixin``. ::
from django.contrib.staticfiles.storage import CachedFilesMixin, ManifestFilesMixin
from pipeline.storage import PipelineMixin
from storages.backends.s3boto import S3BotoStorage
class S3PipelineManifestStorage(PipelineMixin, ManifestFilesMixin, S3BotoStorage):
pass
class S3PipelineCachedStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage):
pass
Using Pipeline with Bower
=========================
`Bower `_ is a `package manager for the web` that allows
you to easily include frontend components with named versions. Integrating
Bower with Pipeline is straightforward.
Add your Bower directory to your ``STATICFILES_DIRS`` : ::
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), '..', 'bower_components'),
)
Then process the relevant content through Pipeline : ::
PIPELINE['JAVASCRIPT'] = {
'components': {
'source_filenames': (
'jquery/jquery.js',
# you can choose to be specific to reduce your payload
'jquery-ui/ui/*.js',
),
'output_filename': 'js/components.js',
},
}
``pipeline.finders.FileSystemFinder`` will help you by excluding much of the
extra content that Bower includes with its components, such as READMEs, tests
and examples, while still including images, fonts, CSS fragments etc.