= Trac and mod_python = Trac 0.7.1 and later supports [http://www.modpython.org/ mod_python], which speeds up Trac's response times considerably and permits use of many Apache features not possible with tracd/mod_proxy. Be sure to grab mod_python 3.1.3 and later for ''SetHandler'' ''mod_python'' directive to work. Also, older versions may generate an internal error. [http://projects.edgewall.com/trac/ticket/1090 #1090] == Warning! == Although it may seem trivial to rewrite the below configuration as a directory in your document root with a .htaccess file, this does not work. Apache will append a "/" to any Trac URLs, which interferes with its correct operation. It may be possible to work around this with mod_rewrite, but I failed to get this working. In all, it is more hassle than it is worth. Stick to the provided instructions. :) == Simple configuration == Here's a typical Trac CGI/Apache setup: {{{ ScriptAlias /projects/myproject /path/to/python/share/trac/cgi-bin/trac.cgi SetEnv TRAC_ENV /var/trac/myproject }}} The equivalent mod_python setup is: {{{ SetHandler mod_python PythonHandler trac.ModPythonHandler PythonOption TracUriRoot "/projects/myproject" PythonOption TracEnv /var/trac/myproject }}} Also do not forget to fix your authentication setup from the original to: {{{ AuthType Basic AuthName "myproject" AuthUserFile /var/trac/myproject/.htaccess Require valid-user }}} Note that the option ''TracUriRoot'' may or may not be necessary in your setup. Try without first, and if the URLs produced by Trac look wrong, add the ''TracUriRoot'' option. == Setting up a project on the root of the webserver == To install Trac on the root of the webserver (in a virtual host context for example) and make it available at the ''!http://some-hostname/'' URL, use the following: {{{ SetHandler mod_python PythonHandler trac.ModPythonHandler PythonOption TracUriRoot "/" PythonOption TracEnv /var/trac/myproject }}} The regular expression used in the !LocationMatch directive permits clients to escape mod_python and access Trac "real" files (located at {{{/var/www/some-hostname/htdocs/trac/}}} on the filesystem). Any other URLs will be handled by mod_python. == Setting up multiple projects == The Trac mod_python handler handler supports a configuration option similar to Subversion's {{{SvnParentPath}}}, called {{{TracEnvParentDir}}}: {{{ SetHandler mod_python PythonHandler trac.ModPythonHandler PythonOption TracUriRoot /projects PythonOption TracEnvParentDir "/var/trac" }}} When you request the {{{/projects}}} 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. == Adding authentication == Adding authentication is straightforward in both cases. For example: {{{ AuthType Basic AuthName "Trac" AuthUserFile /var/www/passwd Require valid-user }}} == Win32 Issues == If you run trac with mod_python on Windows, attachments will not work. There is a (simple) workaround for this which is to apply the patch attached to ticket [http://projects.edgewall.com/trac/ticket/554 #554]. == OS X issues == There is a mod_python issue on OSX: Look at the end of its README. You need to either define the environment variable DYLD_FORCE_FLAT_NAMESPACE before starting httpd or apply [http://www.dscpl.com.au/projects/vampire/PATCHES this patch] to mod_python. ---- See also TracGuide, TracInstall, TracMultipleProjects