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

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

该问题已在不同的邮件列表中多次描述,但尚未发布解决方案。

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

  • 带有 apache 2.2 和 python 2.7 的 Ubuntu 服务器
  • 使用 virtualenv 创建的虚拟 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.

我已经尝试了很多方法来解决该问题的根源,对我来说,似乎所有本地 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

在 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

有谁知道问题可能是什么,或者如何找出问题所在?

答案1

我首先要尝试的是通过 Trac 自己的独立 Web 服务器模块来运行它跟踪。因此,您将范围缩小到 Web 服务器配置。但您已经这样做了 - 这是服务器配置。

所以 - 可能不相关 - 第二,你为你的应用程序选择开发版本有什么特殊原因吗?我会从稳定版本开始,在撰写本文时是 0.12.3。

此外,请尝试按照 trac.edgewall.org 上的 wiki 文档中的可用说明进行操作。看起来您可以使用示例代码进行修改,甚至可能进行改进从那里

相关内容