VirtualBox

Trac插件

Trac可通过插件进行扩展。插件功能基于组件架构,具体描述在插件开发页面。

插件发现

从用户的角度来看,插件可以是单个 .py 文件或一个包(.egg 或 .whl)。Trac在Python的site-packages目录、全局共享plugins目录和项目环境plugins目录中查找插件。安装到项目环境plugins目录的插件是启用的,除非在trac.ini文件的[components]部分中明确禁用。安装在其他位置的插件必须在trac.ini文件的 [components] 部分中明确启用。

安装Trac插件

以下说明适用于作为包安装的插件。作为单个py文件实现的插件应下载并复制到项目环境plugins目录或全局共享插件目录。

针对单个项目

为单个项目构建的包必须使用egg格式,因为setuptools加载机制不支持wheel格式(如下所述)。从插件源代码构建egg文件

  • 检出或下载并解压源代码。
  • 切换到包含setup.py的目录。
  • 运行
    $ python setup.py bdist_egg
    
    egg文件将在dist子目录中创建。
  • 将egg文件复制到项目环境plugins目录中。

确保Web服务器具有足够的权限读取插件egg并重新启动Web服务器。如果你正在运行“tracd”独立服务器,请重新启动tracd(即终止进程并再次运行)。

Trac还会搜索安装在全局共享插件目录中的插件。这是一种方便的方式,可以在多个(但不是所有)环境之间共享插件安装。

注意:用于构建egg的Python次版本号必须与运行Trac的Python次版本号匹配。例如,如果你使用Python 2.6运行Trac,但使用Python 2.7构建egg,则该egg将无法识别。

注意:在多项目设置中,将根据需要动态地为项目分配Python解释器池。由于插件在Python的模块系统中占有一席之地,因此任何给定插件的第一个加载版本将用于所有项目。换句话说,你不能在多项目设置的不同项目中使用不同版本的插件。为所有项目安装插件(见下文),并根据每个项目的需要启用它们。

卸载

plugins目录中删除egg并重新启动Web服务器。

针对所有项目

使用pip

现代Python包管理器pip包含在Python 2.7.9及更高版本中。在更早的Python版本中,可以通过操作系统的包管理器(例如apt-get install python-pip)或使用get_pip.py来安装。

使用pip,插件将以wheel格式安装,这是Python的现代标准,取代了egg格式。

从PyPI

一些插件,例如 [th:TagsPlugin TracTags],可以直接使用pipPyPI安装

$ pip install TracTags

可以指定版本,这在你不想安装最新版本时很有用

$ pip install TracTags==0.10

从源代码

你可以直接从源代码库安装

$ pip install svn+https://trac-hacks.org/svn/tagsplugin/trunk

如果从Git仓库安装,请将svn+前缀替换为git+

或者从tar.gz或zip存档的路径或URL安装

$ pip install https://trac-hacks.org/browser/tagsplugin/trunk?format=zip

或者检出源代码并为pip提供源代码目录的路径

$ svn co https://trac-hacks.org/svn/tagsplugin/trunk tractags
$ pip install tractags

启用插件

与按环境安装的插件不同,你必须明确启用全局安装的插件。这同样适用于安装在共享插件目录中的插件。

这在配置文件trac.ini[components]部分中完成。例如

[components]
tractags.* = enabled

选项的名称是插件包的名称。这应该在插件的文档中指定,但也可以通过查看源代码发现:它通常是包含名为__init__.py的文件的顶级目录名称。

插件也可以从管理页面启用。

安装插件后,必须重新启动Web服务器。

升级环境

有些插件需要环境升级。这通常对于实现IEnvironmentSetupParticipant的插件来说是必要的。需要环境升级的常见原因是为了向数据库添加表或向trac.ini添加配置参数。在安装插件并重新启动Web服务器后首次访问Trac时,将显示通知。要升级环境,请运行以下命令

$ trac-admin /path/to/env upgrade

除非指定了--no-backup选项,否则在升级环境之前将进行数据库备份。有关更多信息,请参阅trac-admin /path/to/env help upgrade的输出文档。

重新部署静态资源

如果你映射了静态资源,使其由Web服务器提供服务,并且插件包含静态资源(CSS、JavaScript和图像文件),则需要将这些资源部署到由Web服务器提供服务的 filesystem 位置。

执行deploy命令,如同在安装和升级时所做的那样

$ trac-admin /path/to/env deploy /deploy/path

执行命令后,必须重新启动Web服务器。

注意:一些Web浏览器(IE、Opera)会缓存CSS和Javascript文件,因此你应该指示用户手动清除浏览器缓存的内容。强制刷新(SHIFT + <F5>)应该就足够了。

卸载

获取已安装插件列表

$ pip list
Package    Version
---------- -------
Jinja2     2.10.1
MarkupSafe 1.1.1
pip        19.2.2
setuptools 41.2.0
Trac       1.4
TracTags   0.10
wheel      0.33.6

通过指定包名卸载插件

$ pip uninstall TracTags

基于Web的插件管理

管理页面为拥有TRAC_ADMIN权限的用户提供有限的插件配置支持

  • 启用/禁用已安装插件
  • 通过上传egg文件安装插件

如果出于安全原因希望禁用第二个功能,请将以下内容添加到你的trac.ini文件中

[components]
trac.admin.web_ui.PluginAdminPanel = disabled

这将禁用整个面板,因此第一个功能将不再可用。

设置插件缓存

一些作为egg安装的插件需要由Python egg的运行时(pkg_resources)解压,以便其内容成为文件系统上的实际文件。它们被解压到的目录默认是当前用户主目录中的.python-eggs,这可能是一个问题,也可能不是。但是,你可以使用PYTHON_EGG_CACHE环境变量覆盖默认位置。

要从Apache配置执行此操作,请使用SetEnv指令

SetEnv PYTHON_EGG_CACHE /path/to/dir

无论你使用CGI还是mod_python前端,这都有效。将此指令放在你设置Trac环境路径的旁边,即在同一个<Location>块中。

例如对于CGI

 <Location /trac>
   SetEnv TRAC_ENV /path/to/projenv
   SetEnv PYTHON_EGG_CACHE /path/to/dir
 </Location>

或者对于mod_python

 <Location /trac>
   SetHandler mod_python
   ...
   SetEnv PYTHON_EGG_CACHE /path/to/dir
 </Location>

注意:SetEnv需要mod_env模块,该模块需要为Apache激活。在这种情况下,SetEnv指令也可以在mod_python Location块中使用。

对于FastCGI,你需要-initial-env选项,或者你的Web服务器提供的任何用于设置环境变量的选项。

注意:如果你已经使用-initial-env为单个项目或父项目设置项目目录,则需要向FastCgiConfig指令添加额外的-initial-env指令

FastCgiConfig -initial-env TRAC_ENV=/var/lib/trac -initial-env PYTHON_EGG_CACHE=/var/lib/trac/plugin-cache

关于钩子脚本

如果你有调用Trac的Subversion钩子脚本,例如/contrib目录中提供的post-commit钩子脚本,请确保在这些脚本中定义PYTHON_EGG_CACHE环境变量。

编写Trac插件

你可以使用以下资源编写自己的Trac插件

故障排除

你是否获得了正确版本的Python egg?

Python egg在其文件名中编码了Python版本。例如,MyPlugin-1.0-py2.5.egg是适用于Python 2.5的egg,如果你运行的是不同版本的Python(如2.4或2.6),则不会加载。

此外,请验证你下载的egg文件确实是.zip存档。如果你从Trac网站下载,你可能下载的是HTML预览页面。

插件是否已启用?

如果你全局安装插件,即在Trac项目环境的plugins目录中安装,则必须在trac.ini中明确启用它。确保

  • 你已将必要的行添加到[components]部分。
  • 包/模块名称正确且不包含拼写错误。
  • 值为enabled,而不是enableEnable
  • 节名称是components,而不是component

检查权限

Trac必须能够读取.py文件或包(.egg或.whl)。

检查日志文件

参见TracTroubleshooting#ChecktheLogs

验证你拥有正确的权限

有些插件要求你拥有特殊权限。例如,TracTags要求具有TAGS_VIEW权限才能添加Tags导航项。

是否加载了错误版本的插件?

如果你将插件放在一个plugins目录中,特别是如果你有多个项目,你需要确保加载了正确版本的插件。以下是一些基本规则

  • 每个运行中的Trac服务器(即每个Python进程)只能加载一个版本的插件。Python命名空间和模块列表将共享,并且无法处理重复项。插件是enabled还是disabled没有区别。
  • 全局安装的插件将覆盖全局或项目插件目录中的任何版本。来自全局插件目录的插件将在任何项目插件目录之前被发现。
  • 如果你的Trac服务器托管多个项目(如TRAC_ENV_PARENT_DIR设置),在两个不同项目中有两个版本的插件将导致不可预测的结果。只有一个会加载,并且加载的那个将由两个项目共享。Trac将加载找到的第一个插件,通常来自接收第一个请求的项目。
  • 在Python site-packages中列出多个版本是没有问题的,因为setuptools会确保你获得最新安装的版本。但是,不要在全局或项目插件目录中存储多个版本:版本号或安装日期都无关紧要。Trac在目录中搜索插件时,无法确定哪个版本会首先被找到。

如果以上所有方法都失败了

参见TracSupport


另请参见Trac指南, TracIni

上次修改 2年前 上次修改于2023年6月2日10:32:55 AM
注意: 查看 TracWiki 获取使用维基的帮助。

© 2025 Oracle 支持 隐私 / 不出售我的信息 使用条款 商标政策 自动化访问礼节