Changes between Version 4 and Version 5 of TracModPython
- Timestamp:
- Aug 10, 2016, 10:38:58 AM (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TracModPython
v4 v5 1 [[TracGuideToc]] 2 1 3 = Trac and mod_python 2 [[TracGuideToc]]3 4 4 5 Mod_python is an [https://httpd.apache.org/ Apache] module that embeds the Python interpreter within the server, so that web-based applications in Python will run many times faster than traditional CGI and will have the ability to retain database connections. 5 6 Trac supports [http://www.modpython.org/ mod_python], which speeds up Trac's response times considerably, especially compared to [TracCgi CGI], and permits use of many Apache features not possible with [wiki:TracStandalone tracd]/mod_proxy. 6 7 7 These instructions are for Apache 2. If you are using Apache 1.3, you may have some luck with [trac:wiki:TracModPython2.7 TracModPython2.7], but that is a deprecated setup.8 9 8 [[PageOutline(2-3,Overview,inline)]] 10 9 11 == Simple configuration: single project ==#Simpleconfiguration10 == Simple configuration: single project #Simpleconfiguration 12 11 13 12 If you just installed mod_python, you may have to add a line to load the module in the Apache configuration: 14 {{{ 13 {{{#!apache 15 14 LoadModule python_module modules/mod_python.so 16 15 }}} 17 16 18 '' Note: The exact path to the module depends on how the HTTPD installation is laid out.''17 '''Note''': The exact path to the module depends on how the HTTPD installation is laid out. 19 18 20 19 On Debian using apt-get: 21 {{{ 20 {{{#!sh 22 21 apt-get install libapache2-mod-python libapache2-mod-python-doc 23 22 }}} 23 24 24 Still on Debian, after you have installed mod_python, you must enable the modules in apache2, equivalent to the above Load Module directive: 25 {{{ 25 {{{#!sh 26 26 a2enmod python 27 27 }}} 28 28 29 On Fedora use, using yum: 29 {{{ 30 {{{#!sh 30 31 yum install mod_python 31 32 }}} 33 32 34 You can test your mod_python installation by adding the following to your httpd.conf. You should remove this when you are done testing for security reasons. Note: mod_python.testhandler is only available in mod_python 3.2+. 33 {{{ 34 #!xml 35 {{{#!apache 35 36 <Location /mpinfo> 36 SetHandler mod_python 37 PythonInterpreter main_interpreter 38 PythonHandler mod_python.testhandler 39 Order allow,deny 40 Allow from all 37 SetHandler mod_python 38 PythonInterpreter main_interpreter 39 PythonHandler mod_python.testhandler 40 # For Apache 2.2 41 <IfModule !mod_authz_core.c> 42 Order allow,deny 43 Allow from all 44 </IfModule> 45 # For Apache 2.4 46 <IfModule mod_authz_core.c> 47 Require all granted 48 </IfModule> 41 49 </Location> 42 50 }}} 43 51 44 52 A simple setup of Trac on mod_python looks like this: 45 {{{ 46 #!xml 53 {{{#!apache 47 54 <Location /projects/myproject> 48 SetHandler mod_python 49 PythonInterpreter main_interpreter 50 PythonHandler trac.web.modpython_frontend 51 PythonOption TracEnv /var/trac/myproject 52 PythonOption TracUriRoot /projects/myproject 53 Order allow,deny 54 Allow from all 55 SetHandler mod_python 56 PythonInterpreter main_interpreter 57 PythonHandler trac.web.modpython_frontend 58 PythonOption TracEnv /var/trac/myproject 59 PythonOption TracUriRoot /projects/myproject 60 # For Apache 2.2 61 <IfModule !mod_authz_core.c> 62 Order allow,deny 63 Allow from all 64 </IfModule> 65 # For Apache 2.4 66 <IfModule mod_authz_core.c> 67 Require all granted 68 </IfModule> 55 69 </Location> 56 70 }}} … … 59 73 60 74 The options available are: 61 {{{ 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 75 {{{#!apache 76 # For a single project 77 PythonOption TracEnv /var/trac/myproject 78 79 # For multiple projects 80 PythonOption TracEnvParentDir /var/trac/myprojects 81 82 # For the index of multiple projects 83 PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html 84 85 # A space delimitted list, with a "," between key and value pairs. 86 PythonOption TracTemplateVars key1,val1 key2,val2 87 88 # Useful to get the date in the wanted order 89 PythonOption TracLocale en_GB.UTF8 90 91 # See description above 92 PythonOption TracUriRoot /projects/myproject 79 93 }}} 80 94 81 95 === Python Egg Cache 82 96 83 Compressed python eggs like Genshi are normally extracted into a directory named `.python-eggs` in the users home directory. Since apache's home usually is not writable, an alternate egg cache directory can be specified like this:84 {{{ 97 Compressed Python eggs like Genshi are normally extracted into a directory named `.python-eggs` in the users home directory. Since Apache's home usually is not writeable, an alternate egg cache directory can be specified like this: 98 {{{#!apache 85 99 PythonOption PYTHON_EGG_CACHE /var/trac/myprojects/egg-cache 86 100 }}} 87 101 88 or you can uncompress the Genshi egg to resolve problems extracting from it.102 Or you can uncompress the Genshi egg to resolve problems extracting from it. 89 103 90 104 === Configuring Authentication … … 96 110 === Setting the Python Egg Cache 97 111 98 If the Egg Cache isn't writeable by your Web server, you'll either have to change the permissions, or point Python to a location where Apache can write. This can manifest itself as a ''500 internal server error'' and/or a complaint in the syslog. 99 100 {{{ 101 #!xml 112 If the Egg Cache isn't writeable by your Web server, you'll either have to change the permissions, or point Python to a location where Apache can write. This can manifest itself as a `500 internal server error` and/or a complaint in the syslog. 113 114 {{{#!apache 102 115 <Location /projects/myproject> 103 116 ... … … 109 122 === Setting the !PythonPath 110 123 111 If the Trac installation isn't installed in your Python path, you'll have to tell Apache where to find the Trac mod_python handler using the `PythonPath` directive: 112 {{{ 113 #!xml 124 If the Trac installation isn't installed in your Python path, you will have to tell Apache where to find the Trac mod_python handler using the `PythonPath` directive: 125 {{{#!apache 114 126 <Location /projects/myproject> 115 127 ... … … 124 136 125 137 The Trac mod_python handler supports a configuration option similar to Subversion's `SvnParentPath`, called `TracEnvParentDir`: 126 {{{ 127 #!xml 138 {{{#!apache 128 139 <Location /projects> 129 140 SetHandler mod_python … … 138 149 139 150 If you don't want to have the subdirectory listing as your projects home page you can use a 140 {{{ 141 #!xml 151 {{{#!apache 142 152 <LocationMatch "/.+/"> 143 153 }}} … … 146 156 147 157 You can also use the same authentication realm for all of the projects using a `<LocationMatch>` directive: 148 {{{ 149 #!xml 158 {{{#!apache 150 159 <LocationMatch "/projects/[^/]+/login"> 151 160 AuthType Basic … … 158 167 === Virtual Host Configuration 159 168 160 Below is the sample configuration required to set up your trac as a virtual server, ie when you access it at the URLs like 161 !http://trac.mycompany.com: 162 163 {{{ 164 #!xml 165 <VirtualHost * > 169 Below is the sample configuration required to set up your Trac as a virtual server, ie when you access it at the URLs like 170 `http://trac.mycompany.com`: 171 172 {{{#!apache 173 <VirtualHost *> 166 174 DocumentRoot /var/www/myproject 167 175 ServerName trac.mycompany.com … … 183 191 184 192 This does not seem to work in all cases. What you can do if it does not: 185 * Try using `<LocationMatch>` instead of `<Location>` 186 * <Location /> may, in your server setup, refer to the complete host instead of simple the root of the server. This means that everything (including the login directory referenced below) will be sent to python and authentication does not work (i.e. you get the infamous Authentication information missing error). If this applies to you, try using a sub-directory for trac instead of the root, ie /web/ and /web/login instead of / and /login.193 * Try using `<LocationMatch>` instead of `<Location>`. 194 * `<Location />` may, in your server setup, refer to the complete host instead of simple the root of the server. This means that everything (including the login directory referenced below) will be sent to Python and authentication does not work, ie you get the infamous Authentication information missing error. If this is the case, try using a sub-directory for Trac instead of the root, ie /web/ and /web/login instead of / and /login. 187 195 * Depending on apache's `NameVirtualHost` configuration, you may need to use `<VirtualHost *:80>` instead of `<VirtualHost *>`. 188 196 189 For a virtual host that supports multiple projects replace "`TracEnv`" /var/trac/myproject with "`TracEnvParentDir`" /var/trac/190 191 Note: !DocumentRoot should not point to your Trac project env. As Asmodai wrote on #trac: "suppose there's a webserver bug that allows disclosure of !DocumentRoot they could then leech the entire Trac environment".197 For a virtual host that supports multiple projects replace `TracEnv /var/trac/myproject` with `TracEnvParentDir /var/trac`. 198 199 '''Note''': !DocumentRoot should not point to your Trac project env. As Asmodai wrote on #trac: "suppose there's a webserver bug that allows disclosure of !DocumentRoot they could then leech the entire Trac environment". 192 200 193 201 == Troubleshooting 194 202 195 In general, if you get server error pages, you can either check the Apache error log, or enable the `PythonDebug` option: 196 {{{ 197 #!xml 203 If you get server error pages, you can either check the Apache error log, or enable the `PythonDebug` option: 204 {{{#!apache 198 205 <Location /projects/myproject> 199 206 ... … … 208 215 If you've used `<Location />` directive, it will override any other directives, as well as `<Location /login>`. 209 216 The workaround is to use negation expression as follows (for multi project setups): 210 {{{ 211 #!xml 217 {{{#!apache 212 218 #this one for other pages 213 219 <Location ~ "/*(?!login)"> … … 216 222 PythonOption TracEnvParentDir /projects 217 223 PythonOption TracUriRoot / 218 219 </Location> 224 </Location> 225 220 226 #this one for login page 221 227 <Location ~ "/[^/]+/login"> … … 255 261 === Problem with zipped egg 256 262 257 It's possible that your version of mod_python will not import modules from zipped eggs. If you encounter an `ImportError: No module named trac` in your Apache logs but you think everything is where it should be, this might be your problem. Look in your site-packages directory; if the Trac module appears as a ''file'' rather than a ''directory'', then this might be your problem. To rectify , try installing Trac using the `--always-unzip` option, like this:258 259 {{{ 263 It's possible that your version of mod_python will not import modules from zipped eggs. If you encounter an `ImportError: No module named trac` in your Apache logs but you think everything is where it should be, this might be your problem. Look in your site-packages directory; if the Trac module appears as a ''file'' rather than a ''directory'', then this might be your problem. To rectify this, try installing Trac using the `--always-unzip` option: 264 265 {{{#!sh 260 266 easy_install --always-unzip Trac-0.12b1.zip 261 267 }}} … … 268 274 269 275 This also works out-of-box, with following trivial config: 270 {{{#! xml276 {{{#!apache 271 277 SetHandler mod_python 272 278 PythonInterpreter main_interpreter … … 281 287 }}} 282 288 283 The `TracUriRoot` is obviously the path you need to enter to the browser to get to Trac, eg domain.tld/projects/trac.289 The `TracUriRoot` is obviously the path you need to enter to the browser to get to Trac, eg `domain.tld/projects/trac`. 284 290 285 291 === Additional .htaccess help 286 292 287 If you are using the .htaccess method you may have additional problems if your trac directory is inheriting .htaccess directives from another. This may also help to add to your .htaccess file:288 289 {{{ 293 If you are using the .htaccess method you may have additional problems if your Trac directory is inheriting .htaccess directives from another. This may also help to add to your .htaccess file: 294 295 {{{#!apache 290 296 <IfModule mod_rewrite.c> 291 297 RewriteEngine Off … … 296 302 ==== Win32 Issues 297 303 298 If you run trac with mod_python < 3.2 on Windows, uploading attachments will '''not''' work. This problem is resolved in mod_python 3.1.4 or later, so please upgrade mod_python to fix this.304 If you run Trac with mod_python < 3.2 on Windows, uploading attachments will '''not''' work. This problem is resolved in mod_python 3.1.4 or later, so please upgrade mod_python to fix this. 299 305 300 306 ==== OS X issues 301 307 302 When using mod_python on OS X you will not be able to restart Apache using `apachectl restart`. This is apparently fixed in mod_python 3.2, so please upgrade .308 When using mod_python on OS X you will not be able to restart Apache using `apachectl restart`. This is apparently fixed in mod_python 3.2, so please upgrade mod_python to fix this. 303 309 304 310 ==== SELinux issues 305 311 306 If Trac reports something like: ''Cannot get shared lock on db.lock'' 307 The security context on the repository may need to be set: 308 309 {{{ 312 If Trac reports something like: `Cannot get shared lock on db.lock`, then the security context on the repository may need to be set: 313 314 {{{#!sh 310 315 chcon -R -h -t httpd_sys_content_t PATH_TO_REPOSITORY 311 316 }}} … … 315 320 ==== FreeBSD issues 316 321 317 The FreeBSD ports have both the new and old versions of mod_python and SQLite, but earlier versions of pysqlite and mod_python won't integrate as the former requires threaded support in Python, and the latter requires a threadless install. 318 319 If you compiled and installed apache2, threads are not automatically supported on FreeBSD. You could force thread support when running `./configure` for Apache, using `--enable-threads`, but this isn´t recommended. 322 The FreeBSD ports have both the new and old versions of mod_python and SQLite, but earlier versions of pysqlite and mod_python won't integrate: 323 * pysqlite requires threaded support in Python 324 * mod_python requires a threadless install. 325 326 Apache2 does not automatically support threads on FreeBSD. You could force thread support when running `./configure` for Apache, using `--enable-threads`, but this isn´t recommended. 320 327 The best option [http://modpython.org/pipermail/mod_python/2006-September/021983.html seems to be] adding to /usr/local/apache2/bin/ennvars the line: 321 328 322 {{{ 329 {{{#!sh 323 330 export LD_PRELOAD=/usr/lib/libc_r.so 324 331 }}} … … 326 333 ==== Fedora 7 Issues 327 334 328 Make sure you install the 'python-sqlite2' package as it seems to be required for TracModPython but not for tracd.335 Make sure you install the 'python-sqlite2' package as it seems to be required for TracModPython, but not for tracd. 329 336 330 337 === Subversion issues 331 338 332 If you get the following Trac error `Unsupported version control system "svn"` only under mod_python, though it works well on the command-line and even with TracStandalone, chances are that you forgot to add the path to the Python bindings with the [TracModPython#ConfiguringPythonPath PythonPath] directive. Thebetter way is to add a link to the bindings in the Python `site-packages` directory, or create a `.pth` file in that directory.333 334 If this is not the case, it's possible that you 're using Subversion libraries that are binary incompatible with the Apache ones and an incompatibility of the `apr` libraries is usually the cause. In that case, you also won't be able to use the svn modules for Apache (`mod_dav_svn`).339 If you get the following Trac error `Unsupported version control system "svn"` only under mod_python, though it works well on the command-line and even with TracStandalone, chances are that you forgot to add the path to the Python bindings with the [TracModPython#ConfiguringPythonPath PythonPath] directive. A better way is to add a link to the bindings in the Python `site-packages` directory, or create a `.pth` file in that directory. 340 341 If this is not the case, it's possible that you are using Subversion libraries that are binary incompatible with the Apache ones and an incompatibility of the `apr` libraries is usually the cause. In that case, you also won't be able to use the svn modules for Apache (`mod_dav_svn`). 335 342 336 343 You also need a recent version of `mod_python` in order to avoid a runtime error ({{{argument number 2: a 'apr_pool_t *' is expected}}}) due to the default usage of multiple sub-interpreters. Version 3.2.8 ''should'' work, though it's probably better to use the workaround described in [trac:#3371 #3371], in order to force the use of the main interpreter: 337 {{{ 344 {{{#!apache 338 345 PythonInterpreter main_interpreter 339 346 }}} 340 347 341 This is a nyway the recommended workaround for other well-knownissues seen when using the Python bindings for Subversion within mod_python ([trac:#2611 #2611], [trac:#3455 #3455]). See in particular Graham Dumpleton's comment in [trac:comment:9:ticket:3455 #3455] explaining the issue.348 This is also the recommended workaround for other issues seen when using the Python bindings for Subversion within mod_python ([trac:#2611 #2611], [trac:#3455 #3455]). See in particular Graham Dumpleton's comment in [trac:comment:9:ticket:3455 #3455] explaining the issue. 342 349 343 350 === Page layout issues 344 351 345 If the formatting of the Trac pages look weird, chances are that the style sheets governing the page layout are not handled properly by the web server. Try adding the following lines to your apache configuration: 346 {{{ 347 #!xml 352 If the formatting of the Trac pages look weird, chances are that the style sheets governing the page layout are not handled properly by the web server. Try adding the following lines to your Apache configuration: 353 {{{#!apache 348 354 Alias /myproject/css "/usr/share/trac/htdocs/css" 349 355 <Location /myproject/css> … … 352 358 }}} 353 359 354 Note: For the above configuration to have any effect it must be put after the configuration of your project root location, i.e.{{{<Location /myproject />}}}.355 356 Also, setting `PythonOptimize On` seems to mess up the page headers and footers, in addition to hiding the documentation for macros and plugins (see #Trac8956). Considering how little effect the option has, leave it `Off`.360 '''Note''': For the above configuration to have any effect it must be put after the configuration of your project root location, ie {{{<Location /myproject />}}}. 361 362 **Note:** Do not enable python optimizations using the directive `PythonOptimize On`. When optimizations are enabled the page header/footer and documentation for macros and plugins will be hidden. An error will be raised in Trac 1.0.11 and later when optimizations are enabled. 357 363 358 364 === HTTPS issues 359 365 360 If you want to run Trac fully under https you might find that it tries to redirect to plain http. In this case just add the following line to your apache configuration: 361 {{{ 362 #!xml 363 <VirtualHost * > 366 If you want to run Trac fully under https you might find that it tries to redirect to plain http. In this case just add the following line to your Apache configuration: 367 {{{#!apache 368 <VirtualHost *> 364 369 DocumentRoot /var/www/myproject 365 370 ServerName trac.mycompany.com … … 373 378 You may encounter segfaults (reported on Debian etch) if php5-mhash module is installed. Try to remove it to see if this solves the problem. See [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411487 Debian bug report]. 374 379 375 Some people also have troubles when using php5 compiled with its own 3rd party libraries instead of system libraries. Check [http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault Django segmentation fault].380 Some people also have troubles when using PHP5 compiled with its own third party libraries instead of system libraries. Check [http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault Django segmentation fault]. 376 381 377 382 ----