Trac问题:AttributeError:找不到名为“WikiModule”的“IRequestHandler”接口的实现

这个问题已经在不同的邮件列表中多次描述过了,但是还没有发布解决scheme。

我原来的设置如下(但同时我在Windows 7上有一个更简单的):

  • Ubuntu的服务器与Apache 2.2和Python 2.7
  • 用virtualenv创build的virutal python环境
  • 在虚拟环境中使用pip按顺序安装了babel,genshi和trac

Trac似乎与tracd运行良好,但通过Apache访问时,我在官方trac错误页面中得到以下错误:

AttributeError:找不到名为“WikiModule”的“IRequestHandler”接口的实现

堆栈跟踪看起来像这样:

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,..)复制到一个目录,并将此目录添加到wsgi处理程序中的system.path中。 我得到完全相同的错误。 由于这个设置现在是独立于环境的,所以可以在运行apache 2和python 2.7的任何其他机器(windows或者linux)上轻松地进行尝试。 在我的Windwos 7机器上,我遇到了同样的问题。

我将整个软件包压缩在一起,可以从http://www.xterity.de/tmp/trac-installation.zip下载。

在Apacheconfiguration(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 

有没有人有一个想法可能是什么问题,或如何找出它来自哪里?

我会尝试的第一件事是通过它自己的独立web服务器模块tracd来运行Trac。 所以你把它缩小到Web服务器configuration。 但是你已经做到了 – 这是服务器configuration。

所以 – 可能是不相关的 – 第二,是否有一个特殊的原因,为什么你select了一个开发版本的应用程序? 在写这篇文章的时候,我会从一个稳定的版本开始,0.12.3。

更进一步,请尝试遵循trac.edgewall.org上wiki文档的可用说明。 看起来您可以使用示例代码修改并可能改进内容。