Назад | Перейти на главную страницу

Проблема трассировки: AttributeError: не удается найти реализацию интерфейса «IRequestHandler» с именем «WikiModule»

Эта проблема уже многократно описывалась в разных списках рассылки, но решение еще не опубликовано.

Моя первоначальная установка выглядит следующим образом (но в то же время у меня есть более простой вариант в 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. Похоже, вы можете изменить и, возможно, улучшить ситуацию, используя пример кода оттуда.