Странное поведение с двумя экземплярами Trac под Apache + mod_wsgi

Я пытаюсь настроить два экземпляра Trac, чтобы получить к ним доступ через браузер, каждый с другим URL-адресом:

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

Первый раз, когда я обращаюсь к ним, ответ Apache в порядке, я получаю первый Trac с /trac1, затем второй с /trac2. Но когда я снова обращаюсь к /trac1, он продолжает выдавать мне содержимое второго Trac (/trac2). Если я коснусь конфигурационного файла .wsgi для первого (скажем, trac1.wsgi), а затем снова запрошу /trac1 в браузере, я снова получу ожидаемое содержимое.

Противоположный случай работает одинаково: доступ к /trac2, затем /trac1, затем /trac2 продолжает выдавать содержимое /trac1, пока я не коснусь trac2.wsgi...

Таким образом, Python, mod_wsgi и/или Apache кэшируют результаты или что-то в этом роде. Я не сисадмин и не могу разобраться в этом вопросе.

Файлы .wsgi и http.conf для Apache:

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>

Если кто-нибудь предложит альтернативную конфигурацию или что-то еще, это также будет приветствоваться. Благодарность!

Гектор


person nabucosound    schedule 08.10.2009    source источник


Ответы (2)


Я сам нашел решение, оно было в документации Trac (раздел «важное примечание»), и я даже не посмотрел, дурак с моей стороны: P

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

person nabucosound    schedule 08.10.2009
comment
Это не так просто, как сказано в разделе важных заметок, и сама по себе конфигурация, которую они описывают, не должна вызывать проблем. Так что я бы не согласился с их конкретным примером. Я бы посоветовал вам прочитать 'code.google.com/p/modwsgi/wiki/IntegrationWithTrac' и 'code.google.com/p/modwsgi/wiki/ '. Последний описывает проблему использования os.environ. Однако для Trac проблема должна возникнуть только при смешивании TRAC_ENV и TRAC_ENV_PARENT_DIR. Короткий ответ во избежание проблем: используется режим демона mod_wsgi, как показано в первой ссылке. - person Graham Dumpleton; 09.10.2009

Переместите свой кеш яиц в отдельные каталоги

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
person Lance Rushing    schedule 08.10.2009