Apache + mod_wsgi下两个Trac实例的异常行为

2 投票
2 回答
502 浏览
提问于 2025-04-15 14:55

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

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

第一次访问时,Apache的响应很好,我可以通过/trac1访问第一个Trac,然后通过/trac2访问第二个。但是当我再次访问/trac1时,它却一直给我显示第二个Trac(/trac2)的内容。如果我对第一个的.wsgi配置文件(比如trac1.wsgi)做点修改,然后再用浏览器请求/trac1,我就能再次看到预期的内容。

反过来也是一样:先访问/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>

如果有人能提供其他配置建议或者其他解决办法,我会非常欢迎。谢谢!

Hector

2 个回答

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
2

我自己找到了答案,原来在Trac的文档里(“重要提示”部分),我之前居然没去看,真是太傻了 :P

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

撰写回答