升级说明
说明
升级到新版Trac有七个推荐步骤
1. 检查您的插件
检查您的插件是否与您要升级到的Trac版本兼容。以下特定版本步骤中列出的过时插件应卸载或禁用。
如果您正在升级到次要版本,插件兼容性通常不是问题,因为Trac API通常保持不变。
如果您的插件是从trac-hacks.org安装的,您可以通过查找项目页面上与主要版本(例如1.4
)对应的标签来检查兼容性。如果您不确定,您需要联系插件作者或在邮件列表上提问。
如果您正在运行多个Trac插件,在升级生产实例之前,最好在您站点的预生产实例中测试升级和插件功能。请记住,插件作者负责Trac版本兼容性,并且插件可能会以意想不到的方式相互作用。您的Trac实例可能具有独特的插件组合,因此建议您在对站点进行任何更改时进行一些验证测试。
2. 使您的服务器离线
更新正在运行的服务器不是一个好主意:服务器进程可能在内存中缓存了当前软件包的部分内容,更新代码很可能会触发内部错误。
尽管在升级环境时默认会隐式创建数据库备份,但在开始之前,使用hotcopy命令对环境进行完整备份始终是个好主意。您可能还希望创建服务器的完整备份。
3. 更新Trac及依赖项
软件包可通过多种渠道获取,如TracDownload中所述。如果您的Trac实例是通过操作系统包管理器安装的,请按照适用于您的操作系统包管理器的标准步骤进行。如果它是通过Windows安装程序安装的,请在安装新的Trac软件包之前卸载旧的Trac软件包。
如果您正在使用命令行工具管理Trac安装,pip
是升级Trac实例的首选工具,因为它会卸载旧版本。以下命令将使用发布到PyPI的软件包升级您的Trac安装。
$ pip install --upgrade Trac
升级命令将为您提供Trac的最新版本。如果您希望升级到不同的版本,例如在有更新的主要版本可用时升级到Trac的次要版本,则在pip
命令中指定Trac版本。
$ pip install --upgrade Trac==1.4.1
您还应该升级依赖项,使其符合所需版本。
4. 升级Trac环境
除非另有说明,否则次要版本发布不需要环境升级。
在升级Trac后启动Web服务器时,将显示需要升级的项目消息,并且在运行升级之前,这些项目将无法访问。
升级使用trac-admin命令运行
$ trac-admin /path/to/projenv upgrade
如果环境已是最新状态,此命令将不起作用。
建议您在运行升级之前将log_level设置为INFO
。日志中的附加信息在升级过程中出现意外情况时可能会有所帮助。
请注意,在升级之前,将自动执行数据库备份。备份将保存在backup_dir指定的位置。
5. 更新Trac文档
默认情况下,每个Trac环境都包含已安装版本的Trac文档副本。为了使文档与已安装的Trac版本保持同步,请升级文档
$ trac-admin /path/to/projenv wiki upgrade
请注意,此过程将使您的WikiStart
、InterMapTxt
和SandBox
页面保持不变。对Trac附带的其他页面的本地更改将被覆盖,但是对于在Trac 1.3.3及更高版本中创建的环境,这些页面默认为只读。
6. 刷新静态资源
如果您已将Web服务器配置为直接提供静态资源(使用/chrome/
URL访问),则需要使用deploy命令刷新它们。deploy
命令将从新的Trac版本和插件中提取静态资源和CGI脚本(如trac.wsgi
等)到/deploy/path
。
$ trac-admin /path/to/env deploy /deploy/path
在刷新之前,建议您删除部署静态资源的目录。目录位置取决于您在安装期间所做的选择。此清理不是强制性的,但可以使您的安装不受先前版本中未使用的资产的干扰,从而更易于故障排除。像往常一样,在删除目录之前进行备份。
注意:某些Web浏览器(IE、Opera)会缓存CSS和JavaScript文件,因此您应指导用户手动清除浏览器缓存的内容。强制刷新(SHIFT + <F5>)应该足够了。
7. 特定Trac版本的步骤
从Trac 1.2升级到1.4
不再支持Python 2.6
将Python升级到2.7,但不要升级到3.0或更高版本。
不再支持MySQL-python
PyMySQL是受支持的MySQL数据库库,已移除对MySQL-python的支持。
废弃插件
Trac已添加与以下插件等效的功能
- DynamicVariablesPlugin:动态变量已自动完成
- NavAddPlugin:请参阅TracNavigation
- FlexibleAssignToPlugin:子类化
ConfigurableTicketWorkflow
并覆盖get_allowed_owners
- TracMigratePlugin:使用
trac-admin
convert_db命令
升级Trac到1.4时应移除这些插件。
Jinja2是新的模板引擎
内容现在使用Jinja2模板引擎生成。您应该验证您的插件是否与此更改兼容。
如果您自定义了Trac模板或site.html
模板,您也需要进行相应调整。(待办:展开...)请参阅#CustomizedTemplates。电子邮件通知模板也需要调整。
Wiki和工单领域的新权限策略
自1.3.2版起,工单和维基系统有了新的权限策略。DefaultTicketPolicy
允许具有TICKET_APPEND
或TICKET_CHPROP
权限的认证用户修改其报告的工单描述。它还实现了1.3.2版本之前的行为,即允许用户编辑自己的工单评论。1.1.2版中添加的ReadonlyWikiPolicy已重命名为DefaultWikiPolicy
。如果不需要默认行为,新权限策略可以很容易地用替代实现替换。
如果[trac] permission_policy
的默认值为ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
,则在升级环境时,DefaultWikiPolicy, DefaultTicketPolicy
应自动附加到列表中
[trac] permission_policies = DefaultWikiPolicy, DefaultTicketPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
如果启用了其他权限策略,则需要编辑trac.ini
以将DefaultWikiPolicy, DefaultTicketPolicy
添加到permission_policies
中。请参阅TracFineGrainedPermissions了解有关正确排序的更多详细信息。
工单枚举中添加了描述字段
工单枚举现在有一个description字段。引用其他表的description
列并与该表(例如ticket
、component
)连接enum
表的报告可能会出现ambiguous column name错误。报告{1}、{2}、{3}、{4}、{5}、{7}和{8}已通过升级步骤进行修改以解决此问题,但如果默认报告已被修改,则修改可能不会成功,在这种情况下,upgrade
将向终端输出一条消息,指示用户修改报告。用户创建的报告也可能需要修改。
显示此错误的报告需要修改,以便用相应的表名或别名作为description
列的前缀。例如,如果ticket
表别名为t
(ticket t
或ticket AS t
),则如果报告应使用工单的description
列,请将description
替换为t.description
。
从trac-admin
initenv
命令中移除了<repostype>
和<repospath>
参数
的TracAdmin initenv
命令允许使用initenv
的第三个和第四个位置参数指定默认仓库
initenv [<projectname> <db> [<repostype> <repospath>]]
这些参数是Trac 0.12之前版本的遗留产物,该版本只支持单个仓库。Trac 0.12及更高版本支持多个仓库,可在创建环境时使用--inherit
和--config
参数指定。请参阅initenv文档了解有关指定源代码仓库的详细信息。
从Trac 1.0升级到1.2
不再支持Python 2.5
将Python升级到至少2.6或2.7,但不要升级到3.0或更高版本。
废弃插件
Trac已添加与以下插件等效的功能
- AdminEnumListPlugin
- AttachmentNotifyPlugin:Trac 1.0.3及更高版本中会发送附件通知
- DateFieldPlugin:请参阅time 自定义字段类型
- FlexibleReporterNotificationPlugin:自定义订阅者可以在新的可扩展通知系统中实现
- GroupBasedRedirectionPlugin:默认处理程序可以设置为用户偏好
- GroupingAssignToPlugin:群组和权限可以在set_owner工作流属性中使用
- LinenoMacro:请参阅WikiProcessors#AvailableProcessors
- NeverNotifyUpdaterPlugin:请参阅通知订阅者
- QueryUiAssistPlugin:请参阅TracQuery#Filters。
- TicketCreationStatusPlugin:请参阅#NewWorkflowActions
升级Trac到1.2时应移除这些插件。
新工作流操作
工单创建步骤由工作流操作控制。默认工作流具有create
和create_and_assign
操作。升级数据库时将始终添加create
操作。如果工作流具有assigned状态,则将添加create_and_assign
操作。您可能希望在升级数据库后编辑工作流,以自定义新建工单页面上可用的操作。
只读维基页面的新权限策略
自1.1.2版起,只有当ReadonlyWikiPolicy
在活动权限策略列表中时,维基页面的只读属性才会被启用和执行。如果[trac] permission_policy
的默认值为DefaultPermissionPolicy, LegacyAttachmentPolicy
,则在升级环境时,ReadonlyWikiPolicy
应自动附加到列表中
[trac] permission_policies = ReadonlyWikiPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
如果启用了其他权限策略,则需要编辑trac.ini
以将ReadonlyWikiPolicy
附加到活动permission_policies
列表中。请参阅TracFineGrainedPermissions#ReadonlyWikiPolicy了解有关正确排序的更多详细信息。
导航顺序已移动
主导航和元导航配置顺序已从[trac]
mainnav
和[trac]
metanav
移动到[mainnav]
和[metanav]
部分。现在使用order
属性指定顺序,如TracNavigation中所述。
新的配置值将在升级时写入trac.ini,保留环境的导航顺序。如果您使用共享的全局配置,则可能需要编辑trac.ini。例如,如果您希望在global.ini
中指定多个环境的导航顺序,则需要在此文件中添加[mainnav]
和[metanav]
部分,并从每个环境的trac.ini中删除这些部分。
从Trac 0.12升级到Trac 1.0
不再支持Python 2.4
将Python升级到至少2.5,但不要升级到3.0。
废弃插件
Trac已添加与以下插件等效的功能
升级Trac到1.0时应移除这些插件。
新安装默认不启用Subversion组件
Trac对Subversion支持的组件不再默认启用。要启用svn支持,您需要确保tracopt.versioncontrol.svn
组件已启用,例如在TracIni中进行以下设置
[components] tracopt.versioncontrol.svn.* = enabled
升级过程应处理此问题并相应地更改TracIni,除非您已明确禁用了svn组件。
附件已迁移到新位置
自动升级的另一个步骤将改变附件的存储方式。有报告称附件迁移有时会失败,因此您备份环境格外重要。
如果attachments
目录中包含一些不是附件的文件,则迁移到新布局的最后一步将无法完成:如果其中仍有文件和文件夹,则无法删除现在未使用的attachments
目录。您可以忽略此错误,但最好将它们移动到其他位置并手动删除attachments
目录。附件本身现在都位于您环境的files/attachments
目录下。
[ticket] default_owner
的行为已更改
在1.0版本之前,当[ticket] default_owner
的值不为空时,新工单的所有者字段总是默认为该值。如果该值为空,则所有者字段默认为组件的所有者。在1.0及更高版本中,必须将default_owner
设置为< default >
才能使新工单默认为组件的所有者。此更改允许在不需要默认所有者时将default_owner
设置为空值。
从旧版Trac升级
对于从Trac 0.12更旧版本升级的情况,请首先参考0.12版的Trac升级说明。
对于从Trac 0.10更旧版本升级的情况,请首先参考0.10版的Trac升级说明。
已知问题
自定义模板
Trac支持通过将模板副本放置在您的环境的<env>/templates
文件夹中,或放置在inherit.templates_dir配置设置中指定的公共位置来定制其模板。如果您选择自定义模板,请注意,当您升级到Trac的新版本(即使是次要版本)时,您将需要在新模板的副本上重复您的更改,因为模板会不断演变。因此,请保留一份差异文件。
执行Trac界面自定义的首选方式是使用自定义插件对生成输出进行客户端JavaScript转换,因为这样在发生更改时更具鲁棒性:我们通常不会修改元素id
或更改其CSS class
,如果必须这样做,则会在TracDev/ApiChanges页面中进行记录。
ZipImportError
由于压缩包的内部缓存,无论何时磁盘上的包内容发生变化,内存中的zip索引将不再匹配,并且您将收到不可恢复的ZipImportError错误。最好预先将服务器停机进行维护,然后再进行升级。请参阅#7014了解详细信息。
维基升级
trac-admin
不会删除或移除在旧版本中存在但新版本中不再存在的默认维基页面。
父目录
如果您使用Trac父环境配置,并且其中一个子环境中的某个插件不起作用,则所有子环境都将无法工作。
附件未迁移
有报告称,升级到Trac 1.0或更高版本时,附件未被迁移。尚未找到此问题的原因。如果您遇到此问题,请参阅常见问题了解解决方法,并请将您的发现报告给#11370。
相关主题
升级Python
将Python升级到新版本将需要重新安装Python包:当然包括Trac本身,还有依赖项。如果您正在使用Subversion,则需要升级SVN的Python绑定。
另请参阅:TracGuide,TracInstall