目录
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
的目录。 - 运行egg文件将在
$ python setup.py bdist_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],可以直接使用pip
从PyPI安装
$ 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
,而不是enable
或Enable
。 - 节名称是
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。