2009-10-08 4 views
2

Je suis en train de configurer deux instances de Trac afin d'y accéder via un navigateur chacun avec un autre url:comportement bizarre avec deux instances de Trac sous Apache + mod_wsgi

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

première fois que je les accéder à la réponse Apache est bien, je reçois le premier Trac avec/trac1, puis le second dans/trac2. Mais quand j'accède à/trac1 à nouveau, il continue à me donner le contenu du second Trac (/ trac2). Si je touche le fichier de configuration .wsgi pour le premier (disons trac1.wsgi), puis demande à nouveau/trac1 avec le navigateur, j'obtiens à nouveau le contenu attendu.

Le cas contraire fonctionne égal: accès/trac2, puis/trac1, puis/trac2 continue à donner le contenu de/trac1 jusqu'à ce que je touche trac2.wsgi ...

Il semble donc Python, mod_wsgi et/ou Apache sont des résultats de mise en cache ou quelque chose. Je ne suis pas sysadmin et ne peux pas aller plus loin sur cette question.

Les fichiers .wsgi et http.conf pour 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> 

Si quelqu'un suggère une configuration alternative ou autre, il sera également le bienvenu. Merci!

Hector

Répondre

2

Je me suis retrouvé la solution, il était sur la documentation Trac (section "note importante"), et je n'ai pas pris d'événement look, imbécile de moi: P

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

+3

Il est pas aussi simple que ce que la section « Remarque importante » a dit et par lui-même la configuration qu'ils décrivent ne devrait pas poser un problème. Donc, je ne suis pas d'accord avec leur exemple précis. Je vous suggère de lire "http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac" et "http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Application_Environment_Variables". Ce dernier décrit le problème de l'utilisation de os.environ. Pour Trac, cependant, cela ne devrait poser problème que lorsque vous mélangez TRAC_ENV et TRAC_ENV_PARENT_DIR. Réponse courte pour éviter les problèmes est utilisé le mode démon mod_wsgi comme indiqué dans le premier lien. –

0

Déplacez votre cache d'oeuf pour séparer dirs

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 
Questions connexes