Эта проблема уже многократно описывалась в разных списках рассылки, но решение еще не опубликовано.
Моя первоначальная установка выглядит следующим образом (но в то же время у меня есть более простой вариант в Windows 7):
Trac, кажется, отлично работает с tracd, но при посещении его через apache я получаю следующую ошибку на официальной странице ошибок trac:
AttributeError: не удается найти реализацию интерфейса «IRequestHandler» с именем «WikiModule».
Трассировка стека выглядит так:
Traceback (most recent call last):
File "/srv/trac/python-environment/lib/python2.5/site-packages/Trac-0.13dev_r10668-py2.5.egg/trac/web/main.py",line 473, in _dispatch_request
dispatcher.dispatch(req)
File "/srv/trac/python-environment/lib/python2.5/site-packages/Trac-0.13dev_r10668-py2.5.egg/trac/web/main.py", line 154, in dispatch
chosen_handler = self.default_handler
File "/srv/trac/python-environment/lib/python2.5/site-packages/Trac-0.13dev_r10668-py2.5.egg/trac/config.py", line 691, in __get__
self.section, self.name))
AttributeError: Cannot find an implementation of the "IRequestHandler" interface named "WikiModule". Please update the option trac.default_handler in trac.ini.
Я уже много пытался разобраться в корне проблемы, мне кажется, что все компоненты nativ trac отказываются загружаться. Когда явно импортируешь эти компоненты в обработчик wsgi, некоторые из них начинают как-то работать.
Поскольку я подозревал виртуальную среду, я отбросил ее и вручную скопировал все зависимости (babel, genshi, trac, ..) в один каталог и добавил этот каталог в system.path в обработчике wsgi. Я получаю точно такую же ошибку. Поскольку эта настройка теперь не зависит от среды, ее можно легко опробовать на любой другой машине (Windows или Linux), на которой запущены apache 2 и python 2.7. На моей машине Windwos 7 у меня возникла точно такая же проблема.
Я заархивировал весь комплект, его можно скачать с http://www.xterity.de/tmp/trac-installation.zip .
В конфигурации apache (машина с Windows 7) я использую следующие настройки:
Alias /trac/chrome/common "D:/workspace/trac-installation/trac-resources/common"
Alias /trac/chrome/site "D:/workspace/trac-installation/trac-resources/site"
WSGIScriptAlias /trac "D:/workspace/trac-installation/apache/handler.wsgi"
<Directory "D:/workspace/trac-installation/trac-resources">
Order allow,deny
Allow from all
</Directory>
<Directory "D:/workspace/trac-installation">
Order allow,deny
Allow from all
</Directory>
<Location "/trac">
Order allow,deny
Allow from all
</Location>
А мой handler.wsgi выглядит так:
import os
import sys
sys.path.append('D:/workspace/trac-installation/dependencies/')
os.environ['TRAC_ENV'] = 'D:/workspace/trac-installation/trac-environments/Esp004'
os.environ['PYTHON_EGG_CACHE'] = 'D:/workspace/trac-installation/eggs'
import trac.web.main
application = trac.web.main.dispatch_request
Кто-нибудь знает, в чем может быть проблема, или как узнать, откуда она взялась?
Первое, что я хотел бы попробовать, это запустить Trac с помощью собственного автономного модуля веб-сервера. tracd. Таким образом, вы сузите его до конфигурации веб-сервера. Но вы это уже сделали - это конфигурация сервера.
Итак - возможно, не связанное с этим - во-вторых, есть ли особая причина, по которой вы выбрали разрабатываемую версию для своего приложения? Я бы начал со стабильной версии 0.12.3 на момент написания этой статьи.
В дальнейшем попробуйте следовать инструкциям в вики-документации на trac.edgewall.org. Похоже, вы можете изменить и, возможно, улучшить ситуацию, используя пример кода оттуда.