3 | | Since version 0.9, Trac supports being run through the [http://www.fastcgi.com/ FastCGI] interface. Like [wiki:TracModPython mod_python], this allows Trac to remain resident, and is faster than external CGI interfaces which must start a new process for each request. However, unlike mod_python, it is able to support [http://httpd.apache.org/docs/suexec.html SuEXEC]. Additionally, it is supported by much wider variety of web servers. |
4 | | |
5 | | '''Note for Windows:''' Trac's FCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, your choice may be [trac:TracOnWindowsIisAjp AJP]. |
| 3 | [http://www.fastcgi.com/ FastCGI] interface allows Trac to remain resident much like with [wiki:TracModPython mod_python]. It is faster than external CGI interfaces which must start a new process for each request. However, unlike mod_python, FastCGI supports [http://httpd.apache.org/docs/suexec.html Apache SuEXEC], i.e. run with different permissions than web server. Additionally, it is supported by much wider variety of web servers. |
| 4 | |
| 5 | '''Note for Windows:''' Trac's FastCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, you may want to try [trac:TracOnWindowsIisAjp AJP]. |
41 | | But neither of these will work for `mod_fcgid`. A similar but partial |
42 | | solution for `mod_fcgid` is: |
43 | | {{{ |
44 | | DefaultInitEnv TRAC_ENV /path/to/env/trac/ |
45 | | }}} |
46 | | But this cannot be used in `Directory` or `Location` context, which makes it |
47 | | difficult to support multiple projects. |
48 | | |
49 | | A better method which works for both of these modules (and for [http://www.lighttpd.net/ lighttpd] and CGI as well), because it involves |
50 | | no server configuration settings for environment variables, is to set one |
51 | | of the variables in `trac.fcgi`, e.g.: |
| 39 | ==== setup with `mod_fcgid` ==== |
| 40 | Configure `ScriptAlias` (see TracCgi for details), but call `trac.fcgi` |
| 41 | instead of `trac.cgi`. Note that slash at the end - it is important. |
| 42 | {{{ |
| 43 | ScriptAlias /trac /path/to/www/trac/cgi-bin/trac.fcgi/ |
| 44 | }}} |
| 45 | |
| 46 | To setup Trac environment for `mod_fcgid` it is necessary to use |
| 47 | `FCGIDDefaultInitEnv` directive. It cannot be used in `Directory` or |
| 48 | `Location` context, so if you need to support multiple projects, try |
| 49 | alternative environment setup below. |
| 50 | |
| 51 | {{{ |
| 52 | FCGIDDefaultInitEnv TRAC_ENV /path/to/env/trac/ |
| 53 | }}} |
| 54 | |
| 55 | ==== alternative environment setup ==== |
| 56 | A better method to specify path to Trac environment it to embed the path |
| 57 | into `trac.fcgi` script itself. That doesn't require configuration of server |
| 58 | environment variables, works for both FastCgi modules |
| 59 | (and for [http://www.lighttpd.net/ lighttpd] and CGI as well): |
73 | | Configuration wanted. |
| 80 | The configuration on Cherokee's side is quite simple. You will only need to know that you can spawn Trac as an SCGI process. |
| 81 | You can either start it manually, or better yet, automatically by letting Cherokee spawn the server whenever it is down. |
| 82 | First set up an information source in cherokee-admin with a local interpreter. |
| 83 | |
| 84 | {{{ |
| 85 | Host: |
| 86 | localhost:4433 |
| 87 | |
| 88 | Interpreter: |
| 89 | /usr/bin/tracd —single-env —daemonize —protocol=scgi —hostname=localhost —port=4433 /path/to/project/ |
| 90 | }}} |
| 91 | |
| 92 | If the port was not reachable, the interpreter command would be launched. Note that, in the definition of the information source, you will have to manually launch the spawner if you use a ''Remote host'' as ''Information source'' instead of a ''Local interpreter''. |
| 93 | |
| 94 | After doing this, we will just have to create a new rule managed by the SCGI handler to access Trac. It can be created in a new virtual server, trac.example.net for instance, and will only need two rules. The '''default''' one will use the SCGI handler associated to the previously created information source. |
| 95 | The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/chrome/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''/usr/share/trac/htdocs/'' |