Version 11 (modified by 20 years ago) ( diff ) | ,
---|
Trac and mod_python
Trac 0.7.1 and later (not yet released) supports mod_python, which speeds up Trac's response times considerably and permits use of many Apache features not possible with tracd/mod_proxy.
Simple configuration
Here's a typical Trac CGI/Apache setup:
ScriptAlias /trac/myproject /path/to/python/share/trac/cgi-bin/trac.cgi <Location /trac/myproject> SetEnv TRAC_ENV /var/svn/trac/myproject </Location>
The equivalent mod_python setup is:
<Location /trac/myproject> SetHandler mod_python PythonHandler trac.ModPythonHandler PythonOption TracUriRoot /trac/myproject PythonOption TracEnv /var/svn/trac/myproject </Location>
Setting up multiple projects
The easy way
The Trac mod_python handler handler supports a configuration option similar to Subversion's SvnParentPath
, called TracEnvParentDir
:
<LocationMatch /trac> SetHandler mod_python PythonHandler trac.ModPythonHandler PythonOption TracUriRoot /trac PythonOption TracEnvParentDir "/var/www/projects" </LocationMatch>
When you request the /trac
URL, you will get a (currently very simple) listing of all subdirectories of the directory you set as TracEnvParentDir
. Selecting any project in the list will bring you to the corresponding Trac instance. You should make sure that the configured directory only contains Trac environment directories that match the currently installed Trac version, because that is not checked prior the the generation of the project list.
Or the hard way
The Trac mod_python handler can be configured to serve multiple projects, as can be seen in the following simple example:
<LocationMatch /trac/[[:alnum:]]+> SetHandler mod_python PythonHandler trac.ModPythonHandler </LocationMatch> <Location /trac/exampleone> PythonOption TracUriRoot "/trac/exampleone" PythonOption TracEnv "/var/www/projects/exampleone" </Location> <Location /trac/exampletwo> PythonOption TracUriRoot "/trac/exampletwo" PythonOption TracEnv "/var/www/projects/exampletwo" </Location>
This sets up two projects. The disadvantage of the approach used here is that you need one additional <Location>
directive per Trac instance. You may be able to eliminate this using some mod_rewrite tricks.
Adding authentication
Adding authentication is straightforward in both cases. For example:
<LocationMatch /trac/[[:alnum:]]+/login> AuthType Basic AuthName "Trac" AuthUserFile /var/www/passwd Require valid-user </LocationMatch>
See also TracGuide, TracInstall, TracMultipleProjects