![Trac 问题:AttributeError:找不到名为“WikiModule”的“IRequestHandler”接口的实现](https://linux22.com/image/546416/Trac%20%E9%97%AE%E9%A2%98%EF%BC%9AAttributeError%EF%BC%9A%E6%89%BE%E4%B8%8D%E5%88%B0%E5%90%8D%E4%B8%BA%E2%80%9CWikiModule%E2%80%9D%E7%9A%84%E2%80%9CIRequestHandler%E2%80%9D%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%9E%E7%8E%B0.png)
该问题已在不同的邮件列表中多次描述,但尚未发布解决方案。
我原来的设置如下(但同时我在 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 文档中的可用说明进行操作。看起来您可以使用示例代码进行修改,甚至可能进行改进从那里。