Apache + mod_wsgi下两个Trac实例的奇怪行为

时间:2009-10-08 17:09:20

标签: python apache trac mod-wsgi

我正在尝试配置两个Trac实例,以便通过浏览器访问它们,每个实例都有一个不同的URL:

http://trac.domain.com/trac1
http://trac.domain.com/trac2

我第一次访问它们Apache响应没问题,我用/ trac1获取第一个Trac,然后在/ trac2中获得第二个Trac。但是当我再次访问/ trac1时,它会不断向我提供第二个Trac(/ trac2)的内容。如果我触摸.wsgi配置文件中的第一个(比如说trac1.wsgi),然后再次请求/ trac1与浏览器,我再次得到预期的内容。

相反的情况相同:access / trac2,然后是/ trac1,然后/ trac2继续给出/ trac1的内容,直到我触摸trac2.wsgi ......

所以似乎Python,mod_wsgi和/或Apache都是缓存结果或其他东西。我不是系统管理员,无法在这个问题上取得进一步的进展。

.wsgi文件和Apache的http.conf:

trac1.wsgi

import os

os.environ['TRAC_ENV'] = '/home/myuser/trac/trac1'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/'

import trac.web.main
application = trac.web.main.dispatch_request

trac2.wsgi

import os

os.environ['TRAC_ENV'] = '/home/myuser/trac/trac2'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/'

import trac.web.main
application = trac.web.main.dispatch_request

的http.conf

<VirtualHost trac.domain.com:8080>

    WSGIScriptAlias /trac1 /home/myuser/public_html/trac1/apache/trac1.wsgi
    WSGIScriptAlias /trac2 /home/myuser/public_html/trac2/apache/trac2.wsgi

    <Directory /home/myuser/public_html/trac1/apache>
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

    <Location "/trac1">
        AuthType Basic
        AuthName "Trac1 Trac Auth"
        AuthUserFile /home/myuser/public_html/trac1/apache/trac1.htpasswd
        Require valid-user
    </Location>


    <Directory /home/myuser/public_html/trac2/apache>
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

    <Location "/trac2">
        AuthType Basic
        AuthName "Trac2 Trac Auth"
        AuthUserFile /home/myuser/public_html/trac2/apache/trac2.htpasswd
        Require valid-user
    </Location>

</VirtualHost>

如果有人建议替代配置或其他任何配置,也欢迎。谢谢!

2 个答案:

答案 0 :(得分:2)

我自己找到了解决方案,它是在Trac文档(“重要说明”部分)中,我没有看过事,傻瓜我:P

http://trac.edgewall.org/wiki/TracModWSGI

答案 1 :(得分:0)

将鸡蛋缓存移至单独的目录

trac1.wsgi:

import os

os.environ['TRAC_ENV'] = '/home/myuser/trac/trac1' 
os.environ['PYTHON_EGG_CACHE'] = '/tmp/trac1'

import trac.web.main 
application = trac.web.main.dispatch_request

trac2.wsgi:

import os

os.environ['TRAC_ENV'] = '/home/myuser/trac/trac2'
os.environ['PYTHON_EGG_CACHE'] = '/tmp/trac2'

import trac.web.main
application = trac.web.main.dispatch_request