Table of Contents
This package enhances the integration of Chameleon in Plone with five.pt.
In our deployments we have source checkouts (git) which are pulled on updates. This may cause templates to be updated on the next request in running instances, which may cause errors because the associated code was not yet reloaded because the zope instance was not yet rebooted. In order to make that more robust we use Chameleon with eager-loading enabled and auto-reload disabled, so that after an instance is started it will no longer read templates.
These options do not work as expected when using five.pt to integrate
Chameleon in combination with ViewPageTemplateFile
instances.
ftw.chameleon
contains enhancements for making that work well.
zope.pagetemplate
is patched on Plone 4 so that it considers theCHAMELEON_RELOAD
configuration: whenCHAMELEON_RELOAD
is disabled it does not trigger a recooking of the template even when it has changed.CHAMELEON_RELOAD
is not available in Plone 5 as it already patches zope.pagetemplate to not recook templates unless Plone is run in debug mode.- When
CHAMELEON_EAGER
is enabled, all templates will be cooked on startup. This is done by explicitly cooking all known templates in a separate thread. - Fire an event when chameleon compiles templates.
- Log warnings or raise exceptions when templates are compiled unexpectedly. This helps to pin-point problems with templates which are not cacheable.
- When
CHAMELEON_EAGER
is enabled, the templates inportal_skins
will be cooked after the first request on the Plone site.
Plone 4.3.x and Plone 5.1.x.
Buildout example for production:
[instance]
eggs +=
ftw.chameleon
environment-vars +=
CHAMELEON_EAGER true
CHAMELEON_RELOAD false
CHAMELEON_CACHE ${buildout:directory}/var/chameleon-cache
FTW_CHAMELEON_RECOOK_WARNING true
Buildout example for development:
[instance]
eggs +=
ftw.chameleon
environment-vars +=
CHAMELEON_RELOAD true
CHAMELEON_CACHE ${buildout:directory}/var/chameleon-cache
You need to make sure that the cache-directory exists. This can be done with buildout:
[buildout]
parts += chameleon-cache
[chameleon-cache]
directory = ${buildout:directory}/var/chameleon-cache
recipe = collective.recipe.shelloutput
commands =
cmd1 = mkdir -p ${chameleon-cache:directory}
[instance]
environment-vars +=
CHAMELEON_CACHE ${chameleon-cache:directory}
Name | Description | Values | Recommendation |
CHAMELEON_EAGER |
Parse and compile templates on startup. | true , false |
true |
CHAMELEON_RELOAD (Plone4 only) |
Reload templates when they have changed. | true , false |
false |
CHAMELEON_CACHE |
File system cache. | Path to cache directory. | .../var/chameleon-cache |
FTW_CHAMELEON_RECOOK_WARNING |
Warn when recooking templates. | true , false |
true |
FTW_CHAMELEON_RECOOK_EXCEPTION |
Raise exception when recooking templates. | true , false |
true when using Sentry. |
See also the Chameleon documentation.
- Fork this repo
- Clone your fork
- Shell:
ln -s development.cfg buildout.cfg
- Shell:
python bootstrap.py
- Shell:
bin/buildout
Run bin/test
to test your changes.
Or start an instance by running bin/instance fg
.
- Github: https://github.com/4teamwork/ftw.chameleon
- Issues: https://github.com/4teamwork/ftw.chameleon/issues
- Pypi: http://pypi.python.org/pypi/ftw.chameleon
This package is copyright by 4teamwork.
ftw.chameleon
is licensed under GNU General Public License, version 2.